TOP

Ore de lucru

Descriere

Î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 Insert - Module) și copiați acolo textul acestei funcții:

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)