In questo articolo considereremo come calcolare l'orario di lavoro tra due date. Queste informazioni possono essere necessarie sia per l'analisi dell'efficienza del lavoro dei dipendenti che per il calcolo del tempo utile impiegato nel caso di un sistema di pagamento a cottimo.
Quindi, scriviamo la nostra funzione che ci aiuti a contare le ore lavorative e chiamiamola WORKHOURS.
Apri il menù Servizio - Macro - Editor Visual Basic , inserire il nuovo modulo (menù
Function WORKHOURS(StartDate As Variant, EndDate As Variant)
Application.Volatile
StartDate = StartDate.Address
EndDate = EndDate.Address
' orario di lavoro del primo giorno
WORKHOURS1 = Evaluate("IF(AND(DAY(" & StartDate & ")=DAY(" & _
EndDate & "),MONTH(" & StartDate & ")=MONTH(" & EndDate & "))," & EndDate & _
"-" & StartDate & "-IF(AND(HOUR(" & StartDate & ")<=13,HOUR(" & EndDate & _
")>=14),1/24,0),18/24-MOD(" & StartDate & ",1)-IF(HOUR(" & StartDate & _
")<=13,1/24,0))")
' orari di lavoro dei giorni intermedi
WORKHOURS2 = Evaluate("MAX((IF(AND((WEEKDAY(" & EndDate & ",2))"&"<"&"(WEEKDAY(" & StartDate & _
",2)),((WEEKDAY(" & StartDate & ",2))-(WEEKDAY(" & EndDate & ",2)))>1),(((DATEDIF(" & StartDate & _
"," & EndDate & "," & """D""" & ")+1))-(FLOOR((DATEDIF(" & StartDate & "," & EndDate & _
"," & """D""" & ")+1)/7,1)*2)-2),(((DATEDIF(" & StartDate & "," & EndDate & "," & """D""" & ")+1))-(FLOOR((DATEDIF(" & _
StartDate & "," & EndDate & "," & """D""" & ")+1)/7,1)*2)))-2),0)*8/24")
' orario di lavoro dell'ultimo giorno
WORKHOURS3 = Evaluate("IF(AND(DAY(" & StartDate & _
")=DAY(" & EndDate & "),MONTH(" & StartDate & ")=MONTH(" & EndDate & ")),0,MOD(" & EndDate & _
",1)-9/24-IF(HOUR(" & EndDate & ")>=14,1/24,0))")
WORKHOURS = WORKHOURS1 + WORKHOURS2 + WORKHOURS3
End Function
Chiudi l'editor Visual Basic e torna a Excel.
Ora in Maestri di funzioni nella categoria Definito dall'utente puoi trovare la nostra funzione WORKHOURS e usarla. Sintassi della funzione seguente:
=ORA LAVORO(data_inizio; data_fine)