In diesem Artikel betrachten wir, wie man die Arbeitszeit zwischen zwei Terminen berechnet. Diese Informationen können sowohl für die Analyse der Effizienz der Arbeit der Mitarbeiter als auch für die Berechnung der Nutzungszeit im Falle eines Akkordlohnsystems benötigt werden.
Schreiben wir also unsere eigene Funktion, die uns beim Zählen der Arbeitsstunden hilft, und nennen wir sie WORKHOURS.
Öffnen Sie das Menü Dienst – Makro – Editor Visual Basic , Setzen Sie das neue Modul ein (Speisekarte
Function WORKHOURS(StartDate As Variant, EndDate As Variant) Application.Volatile StartDate = StartDate.Address EndDate = EndDate.Address ' Arbeitszeiten des ersten Tages 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))") ' Arbeitszeiten der Zwischentage 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") ' Arbeitszeit des letzten Tages 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
Schließen Sie den Visual Basic-Editor und kehren Sie zu Excel zurück.
Jetzt in Funktionsmeister in der Kategorie Benutzerdefinierte Sie können unsere Funktion WORKHOURS finden und verwenden. Funktionssyntax Folgendes:
=WORKHOURS(start_date; end_date)