Condividi:        

sommare minuti ad orario lavorativo

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

sommare minuti ad orario lavorativo

Postdi lellolory » 18/01/19 18:07

Salve a tutti, io ho il seguente orario lavorativo:
08:00
14:00 -14:30 (pausa che però può variare o possono essercene più di una nella giornata che dovrò inserire)
22:00

Vorrei calcolare quando un prodotto esce dalla mia linea di produzione conoscendo il suo tempo di assemblaggio.

Es: inizio a montare il 01-01-19 alle 08:00, ci impiego 30 minuti, il risultato nella cella deve essere 01-01-19 08:30.
fino a qui tutto ok, il problema mi si presenta quando il risultato della somma cade nella pausa o dopo le 22:00.

quindi se inizio a montare il 01-01-19 alle ore 21:30 e ci impiego 60 minuti, il risultato della somma non deve essere 01-01-19 22:30, ma 02-01-19 08:30.

E' possibile creare un foglio del genere che a partire dalla data e ora di inizio, calcoli data e ora di fine considerando il tempo di montaggio e l'orario lavorativo?

grazie a tutti
lellolory
Utente Junior
 
Post: 18
Iscritto il: 23/01/14 10:41

Sponsor
 

Re: sommare minuti ad orario lavorativo

Postdi Anthony47 » 20/01/19 18:56

Ti suggerisco di usare la funzione TerminaXa, descritta in questa vecchia discussione:
viewtopic.php?f=26&t=98657&p=582449#p582449

Presuppone la presenza di una tabella che descrive gli orari lavorativi, descritta nel messaggio che ho linkato.

Il codice della funzione:
Codice: Seleziona tutto
Function TermineXA(ByVal Durata As Double, ByVal Via As Double, ByRef TT As Range, _
         Optional ByRef Holid As Range, Optional ByRef AllTable As Range) As Variant
'V 3.0 B31221  by Anthony
'Data una "durata" in [hh]:mm:ss, una data/ora di inizio, e un orario di lavoro,
'   calcola la data/ora di conclusione (di una attivita')
'L' orario e' definito separatamente per i giorni settimanali: 1=Lun, 2= Mart,... 7=Dom
'  la tabella orari e' organizzata come segue
'     1     6     7     10    '1="dal Lunedì in avanti"; 6="dal Sab in avanti"; ... 10=Festivi
'    Entr  Entr  Entr  Entr
'    Usc   Usc   Usc   Usc
'    Entr  Entr  Entr  Entr
'    Usc   Usc   Usc   Usc
'    ...   ...   ...   ...
'MAX 10 blocchi Entr/Usc; se blocco vuoto=non si lavora
'
'Esempio di Uso:
'   =TermineXA(OreDurataTask;DataOraDiInizio;IntestazioneTabellaOrari;RangeFestivita'[;Opzionale:TabellaOrari])
'   Ore e Date vanno indicate come Ore e Date nel formato Excel
'
Dim CDay As Long, mWTT, CDTT As Range, I As Long, MinMatch, RowSt As Long, MinTask As Long, MinScr As Long
Dim EndMin As Double, J As Long, CDTRec As Long, CDStart As Double
'
Const MaDay As Long = 24 * 60
MinTask = Durata * MaDay
If MinTask > (500 * 60) Then TermineXA = CVErr(xlErrNA): Exit Function
'
'Gestisci Holid opzionale:
If Holid Is Nothing Then
    Set Holid = TT
End If
'
For J = 1 To 200
    CDay = Application.WorksheetFunction.Weekday(Via, 2)
    If Application.WorksheetFunction.CountIf(Holid, Int(Via)) > 0 Then CDay = 10  'caso festivo
    mWTT = Application.Match(CDay, TT, True)
    Set CDTT = Range(TT.Cells(1, mWTT).Offset(1, 0), TT.Cells(1, mWTT).End(xlDown))  'current day timetable
    If CDTT.Rows.Count <= 20 Then
        CDTRec = Application.WorksheetFunction.CountA(CDTT)
        CDStart = (CDTT.Cells(1, 1).Value * MaDay)
        For I = (Via - Int(Via)) * MaDay To MaDay
            If I >= CDStart Then
                MinMatch = Application.Match(I / MaDay, CDTT, True)
                If MinMatch Mod 2 = 1 Then
                    MinScr = MinScr + 1
                   Else
                    If MinMatch >= CDTRec Then Exit For
                End If
                If MinScr >= MinTask Then
                    EndMin = (I + 1) / MaDay
                    GoTo EndF
                End If
            End If
        Next I
    End If
    Via = Int(Via) + 1
Next J
'
EndF:
TermineXA = Int(Via) + EndMin
'max circa 200 gg
If J >= 200 Then
    TermineXA = CVErr(xlErrNA)
End If
End Function

Poi calcolerai data /ora di termine di un task con una formula del tipo
Codice: Seleziona tutto
=TermineXA(OreDurataTask;DataOraDiInizio;IntestazioneTabellaOrari[;RangeFestivita'[;Opzionale:TabellaOrari]])

I parametri tra parentesi quadre sono opzionali.

Fai sapere…
Avatar utente
Anthony47
Moderatore
 
Post: 19438
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: sommare minuti ad orario lavorativo

Postdi lellolory » 21/01/19 12:10

Anthony47 ha scritto:Ti suggerisco di usare la funzione TerminaXa, descritta in questa vecchia discussione:
viewtopic.php?f=26&t=98657&p=582449#p582449

Presuppone la presenza di una tabella che descrive gli orari lavorativi, descritta nel messaggio che ho linkato.

Il codice della funzione:
Codice: Seleziona tutto
Function TermineXA(ByVal Durata As Double, ByVal Via As Double, ByRef TT As Range, _
         Optional ByRef Holid As Range, Optional ByRef AllTable As Range) As Variant
'V 3.0 B31221  by Anthony
'Data una "durata" in [hh]:mm:ss, una data/ora di inizio, e un orario di lavoro,
'   calcola la data/ora di conclusione (di una attivita')
'L' orario e' definito separatamente per i giorni settimanali: 1=Lun, 2= Mart,... 7=Dom
'  la tabella orari e' organizzata come segue
'     1     6     7     10    '1="dal Lunedì in avanti"; 6="dal Sab in avanti"; ... 10=Festivi
'    Entr  Entr  Entr  Entr
'    Usc   Usc   Usc   Usc
'    Entr  Entr  Entr  Entr
'    Usc   Usc   Usc   Usc
'    ...   ...   ...   ...
'MAX 10 blocchi Entr/Usc; se blocco vuoto=non si lavora
'
'Esempio di Uso:
'   =TermineXA(OreDurataTask;DataOraDiInizio;IntestazioneTabellaOrari;RangeFestivita'[;Opzionale:TabellaOrari])
'   Ore e Date vanno indicate come Ore e Date nel formato Excel
'
Dim CDay As Long, mWTT, CDTT As Range, I As Long, MinMatch, RowSt As Long, MinTask As Long, MinScr As Long
Dim EndMin As Double, J As Long, CDTRec As Long, CDStart As Double
'
Const MaDay As Long = 24 * 60
MinTask = Durata * MaDay
If MinTask > (500 * 60) Then TermineXA = CVErr(xlErrNA): Exit Function
'
'Gestisci Holid opzionale:
If Holid Is Nothing Then
    Set Holid = TT
End If
'
For J = 1 To 200
    CDay = Application.WorksheetFunction.Weekday(Via, 2)
    If Application.WorksheetFunction.CountIf(Holid, Int(Via)) > 0 Then CDay = 10  'caso festivo
    mWTT = Application.Match(CDay, TT, True)
    Set CDTT = Range(TT.Cells(1, mWTT).Offset(1, 0), TT.Cells(1, mWTT).End(xlDown))  'current day timetable
    If CDTT.Rows.Count <= 20 Then
        CDTRec = Application.WorksheetFunction.CountA(CDTT)
        CDStart = (CDTT.Cells(1, 1).Value * MaDay)
        For I = (Via - Int(Via)) * MaDay To MaDay
            If I >= CDStart Then
                MinMatch = Application.Match(I / MaDay, CDTT, True)
                If MinMatch Mod 2 = 1 Then
                    MinScr = MinScr + 1
                   Else
                    If MinMatch >= CDTRec Then Exit For
                End If
                If MinScr >= MinTask Then
                    EndMin = (I + 1) / MaDay
                    GoTo EndF
                End If
            End If
        Next I
    End If
    Via = Int(Via) + 1
Next J
'
EndF:
TermineXA = Int(Via) + EndMin
'max circa 200 gg
If J >= 200 Then
    TermineXA = CVErr(xlErrNA)
End If
End Function

Poi calcolerai data /ora di termine di un task con una formula del tipo
Codice: Seleziona tutto
=TermineXA(OreDurataTask;DataOraDiInizio;IntestazioneTabellaOrari[;RangeFestivita'[;Opzionale:TabellaOrari]])

I parametri tra parentesi quadre sono opzionali.

Fai sapere…



Sono bloccato a questo punto:
Immagine

nella formula ho selezionato tutta la tabella, ho anche provato a selezionare solo l'intestazione ed effettivamente mi restituisce una data. se ad esempio inserisco nella cella della durata (A2) il valore : 1 mi aspetto che la lavorazione duri un'ora, ma così non è
Che valore devo inserire nella durata? In che unità di misura?

grazie
lellolory
Utente Junior
 
Post: 18
Iscritto il: 23/01/14 10:41

Re: sommare minuti ad orario lavorativo

Postdi lellolory » 21/01/19 12:34

tutto risolto! ho capito il file ed ho inserito una cella dove metto la durata in minuti che viene trasformata in automatico in ore:min.

grazie mille per la soluzione!
lellolory
Utente Junior
 
Post: 18
Iscritto il: 23/01/14 10:41

Re: sommare minuti ad orario lavorativo

Postdi Anthony47 » 21/01/19 16:04

Perfetto… Ti raccomando di completare la tabella degli orari col Sabato (6), la Domenica (7) e i Festivi infrasettimanali (10), se in queste giornate hai un orario di lavoro diverso da quello che hai impostato.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19438
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "sommare minuti ad orario lavorativo":


Chi c’è in linea

Visitano il forum: Nessuno e 10 ospiti