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)