În acest articol, vom lua în considerare modul de calcul al orelor de lucru între două date. Aceste informații pot fi necesare atât pentru analiza eficienței muncii angajaților, cât și pentru calcularea timpului util petrecut în cazul unui sistem de plată la bucată.
Deci, să scriem propria noastră funcție pentru a ne ajuta să numărăm orele de lucru și să o numim WORKHOURS.
Deschide meniul Serviciu - Macro - Editor Visual Basic , introduceți noul modul (meniul
Function WORKHOURS(StartDate As Variant, EndDate As Variant)
Application.Volatile
StartDate = StartDate.Address
EndDate = EndDate.Address
' programul de lucru din prima zi
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))")
' orele de lucru de zile intermediare
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")
' programul de lucru din ultima zi
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
Închideți editorul Visual Basic și reveniți la Excel.
Acum in Maeștri de funcții în categorie Definit de utilizator puteți găsi funcția noastră WORKHOURS și o puteți utiliza. Sintaxa funcției ca urmare a:
=WORKHOURS(data_început; data_final)