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)