Nachtschicht-Zeitberechnung für Zuschlag

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"]

Dieser Beitrag wurde unter Datum und Zeit, Mit VBA/Makro, Musterlösungen, Rechnen & Zahlen, Zeit-Funktionen abgelegt und mit , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

4 Antworten zu Nachtschicht-Zeitberechnung für Zuschlag

  1. Peer sagt:

    Hallo.
    Auch ich finde die Funktion genial. Ich war schon lang auf der Suche nach so etwas.
    Aber was ist mit Thomas Frage?
    Wie muss/kann ich den Code anpassen, das Sonntage oder Wochenfeiertage berücksichtigt werden?

    LG
    Peer

    • Admin sagt:

      Vielleicht an dieser Stelle eine grundsätzliche Anmerkung: Sie werden es mir glauben, dass der Blog viel, viel Zeit kostet. Und der Sinn dieser Beiträge liegt darin, die Leser anzuregen, sich mit den entsprechenden Themen zu befassen.

      Da ich auch noch „nebenbei“ 😉 ein paar Euros für meinen Lebensunterhalt verdienen muss, werde ich selten gezielte Fragen zu weiter- oder tiefergehenden Problemstellungen auf diesem Wege beantworten können. Das gilt natürlich nicht, wenn hier etwas nicht klar genug oder sogar fehlerhaft dargestellt worden ist, da werde ich Abhilfe schaffen. In den anderen Fällen einfach eine Mail an mich (-> Impressum) und es wird sich ein für beide Seiten zufriedenstellender Weg finden.

      Günther

  2. TomUse sagt:

    Diese Funktion ist wirklich sexy, toll gemacht. Aber eine Frage hätte ich noch ?
    Kann man diese Funktion auf Montag- Samstag einschränken, weil Sonn oder Feiertags andere Nachtschichtzuschläge gelten ?

    Gruss Thomas

Schreibe einen Kommentar