Bu yazımızda iki tarih arasındaki çalışma saatlerinin nasıl hesaplanacağını ele alacağız. Bu bilgiye hem çalışanların iş verimliliğinin analizi için hem de parça başı ödeme sistemi durumunda harcanan faydalı zamanın hesaplanması için ihtiyaç duyulabilir.
O halde çalışma saatlerini saymamıza yardımcı olacak kendi fonksiyonumuzu yazalım ve buna WORKHOURS adını verelim.
Menüyü aç Hizmet - Makro - Düzenleyici Visual Basic , yeni modülü takın (Menü
Function WORKHOURS(StartDate As Variant, EndDate As Variant)
Application.Volatile
StartDate = StartDate.Address
EndDate = EndDate.Address
' ilk günün çalışma saatleri
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))")
' ara günlerin çalışma saatleri
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")
' son günün çalışma saatleri
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
Visual Basic düzenleyicisini kapatın ve Excel'ye dönün.
Şimdi Fonksiyon ustaları kategoride Kullanıcı tanımlı WORKHOURS fonksiyonumuzu bulup kullanabilirsiniz. İşlev sözdizimi takip etme:
=WORKHOURS(başlangıç_tarihi; bitiş_tarihi)