Î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)