Berechnung der Zeit, welche in eine Nachtschicht fällt (hh:mm)
In manchen Betrieben wird für die Arbeitszeit, welche in die Nachtschicht fällt, ein Zuschlag bezahlt. Wird die komplette Nachtschicht, also von Anfang bis Ende gearbeitet, dann ist das leicht zu berechnen. Auch wenn die gesamte Arbeitszeit nur wenige Stunden umfasst aber komplett in der Nachtschicht liegt, ist das kein Problem.
Interessant wird es, wenn ein Teil der Arbeitszeit im normal bezahlten Bereich liegt und ein anderer Teil in der Nachtschicht. Hier wird naturgemäß nur jener Teil, welcher in der Nachtschicht liegt, höher bezahlt. Und die gleich vorgestellte Funktion wird auch nur den besser zu entlohnenden Zeitbereich ausrechnen.
Was Sie bedenken sollten, nein was Sie beachten müssen:
- Der Code gehört in ein allgemeines Modul. Tipps dazu finden Sie hier.
- Die Reihenfolge der Zeiten muss stimmen, erst Beginn dann Ende.
- Eine Schicht hat maximal 23:59:59 h, muss also unter 24 Stunden liegen.
- Die Anfangs- und Endezeiten müssen als echte Zeit eingegeben werden.
- Den Beginn und das Ende der Nachtschicht müssen Sie im Code erforderlichenfalls anpassen. Vorgegeben ist 20:00 h bis 6:00 h in der Frühe.
Option Explicit Function NachtZeit(Beginn As Date, Ende As Date) As Date Dim NsStart As Date, NsEnde As Date Dim Ns As Boolean, ZweiTage As Boolean Dim Rc As Variant NsStart = CDate("20:00") 'Beginn der Nachtschicht NsEnde = CDate("6:00") 'Ende der Nachtschicht If Ende < Beginn Then ZweiTage = True If ZweiTage Then Ns = True If Beginn >= NsStart Or Beginn <= NsEnde Then Ns = True If Ende <= NsEnde Or Ende >= NsStart Then Ns = True If Ns Then If ZweiTage Then 'Beginn vor Mitternacht If Beginn >= NsStart Then 'Beginn in der Nachtschicht Rc = 1 - Beginn Else 'Beginn vor der Nachtschicht Rc = 1 - NsStart End If Rc = Rc + WorksheetFunction.Min(Ende, NsEnde) Else 'Nur an 1 Tag If Beginn < NsEnde Then 'Beginn ab Mitternacht Rc = WorksheetFunction.Min(NsEnde, Ende) - Beginn Else 'Beginn vor Mitternacht Rc = WorksheetFunction.Min(1, Ende) - WorksheetFunction.Max(NsStart, Beginn) End If End If End If NachtZeit = Rc End Function
Sie können den Code hierüber kopieren und dann per Hand in Ihr Modul einfügen oder in einer *.zip-gepackten Datei als Text bzw. importierbare Datei hier herunter laden. Der Aufruf der Funktion erfolgt so:
=NachtZeit(Beginn; Ende)
wobei beide Argumente Beginn und Ende zwingend eingegeben werden müssen. Das ist ja auch logisch, denn die Arbeitszeit hat ja nun einmal eine Beginn- und eine Ende-Zeit. Idealerweise verweisen die beiden Argumente auf eine Zelle mit einer Uhrzeit. Es ist aber auch möglich, eine Zeit in der Form "17:30"
(ja, mit den Anführungszeichen) oder als Funktion wie z.B. ZEIT(17; 30; 0)
als Argument einzugeben.
Diese Funktion gibt immer eine Uhrzeit zurück. Es ist ausschließlich die Zeitspanne, welche in der Nachtschicht geleistet wurde, also höher bezahlt werden muss. Soll die Zeit als Grundlage für eine Entgeltberechnung dienen, dann muss das Ergebnis mit 24 multipliziert und sollte dann der Deutlichkeit wegen als Dezimalzahl dargestellt werden.
Um die Funktion möglichst einfach handhabbar zu machen, sind nur die beiden unbedingt erforderlichen Parameter bei dem obigen Code eingearbeitet. Möchten Sie das Ganze flexibler gestalten, indem Sie bei jeder Berechnung den Beginn und das Ende der Nachtschicht in den Funktionsaufruf als Argument eingeben, dann muss der Code leicht geändert werden. Sie können ihn als gepackte Textdatei an dieser Stelle herunterladen. Der Aufruf ergibt sich aus dem Funktionsnamen, alle vier Argumente sind Pflicht-Eingaben. Die beiden letzten Argumente sind der Beginn und das Ende der Nachtschicht und müssen (natürlich) so übergeben werden, dass Excel sie als Zeit interpretieren kann.
[NachObenLetzte Verweis=„ML: Nachtschicht extrahieren”]