TOP

Çalışma saatleri

Tanım

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ü Insert - Module) ve bu işlevin metnini buraya kopyalayın:

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)