Nachtschicht-Zeitberechnung für Zuschlag

Berechnung der Zeit, welche in eine Nachtschicht fällt (hh:mm)

In manchen Betrieben wird für die Arbeit­szeit, welche in die Nachtschicht fällt, ein Zuschlag bezahlt. Wird die kom­plette Nachtschicht, also von Anfang bis Ende gear­beit­et, dann ist das leicht zu berech­nen. Auch wenn die gesamte Arbeit­szeit nur wenige Stun­den umfasst aber kom­plett in der Nachtschicht liegt, ist das kein Prob­lem.

Inter­es­sant wird es, wenn ein Teil der Arbeit­szeit im nor­mal bezahlten Bere­ich liegt und ein ander­er Teil in der Nachtschicht. Hier wird naturgemäß nur jen­er Teil, welch­er in der Nachtschicht liegt, höher bezahlt. Und die gle­ich vorgestellte Funk­tion wird auch nur den bess­er zu ent­lohnen­den Zeit­bere­ich aus­rech­nen.

 Was Sie bedenken soll­ten, nein was Sie beacht­en müssen:

  • Der Code gehört in ein all­ge­meines Mod­ul. Tipps dazu find­en Sie hier.
  • Die Rei­hen­folge der Zeit­en muss stim­men, erst Beginn dann Ende.
  • Eine Schicht hat max­i­mal 23:59:59 h, muss also unter 24 Stun­den liegen.
  • Die Anfangs- und Endezeit­en müssen als echte Zeit eingegeben wer­den.
  • Den Beginn und das Ende der Nachtschicht müssen Sie im Code erforder­lichen­falls 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ön­nen den Code hierüber kopieren und dann per Hand in Ihr Mod­ul ein­fü­gen oder in ein­er *.zip-gepack­ten Datei als Text bzw. importier­bare Datei hier herunter laden. Der Aufruf der Funk­tion erfol­gt so:
=NachtZeit(Beginn; Ende)
wobei bei­de Argu­mente Beginn und Ende zwin­gend eingegeben wer­den müssen. Das ist ja auch logisch, denn die Arbeit­szeit hat ja nun ein­mal eine Beginn- und eine Ende-Zeit. Ide­al­er­weise ver­weisen die bei­den Argu­mente auf eine Zelle mit ein­er Uhrzeit. Es ist aber auch möglich, eine Zeit in der Form "17:30" (ja, mit den Anführungsze­ichen) oder als Funk­tion wie z.B. ZEIT(17; 30; 0) als Argu­ment einzugeben.

Diese Funk­tion gibt immer eine Uhrzeit zurück. Es ist auss­chließlich die Zeitspanne, welche in der Nachtschicht geleis­tet wurde, also höher bezahlt wer­den muss. Soll die Zeit als Grund­lage für eine Ent­gelt­berech­nung dienen, dann muss das Ergeb­nis mit 24 mul­ti­pliziert und sollte dann der Deut­lichkeit wegen als Dez­i­malzahl dargestellt wer­den.

Um die Funk­tion möglichst ein­fach hand­hab­bar zu machen, sind nur die bei­den unbe­d­ingt erforder­lichen Para­me­ter bei dem obi­gen Code eingear­beit­et. Möcht­en Sie das Ganze flex­i­bler gestal­ten, indem Sie bei jed­er Berech­nung den Beginn und das Ende der Nachtschicht in den Funk­tion­saufruf als Argu­ment eingeben, dann muss der Code leicht geän­dert wer­den. Sie kön­nen ihn als gepack­te Text­datei an dieser Stelle herun­ter­laden. Der Aufruf ergibt sich aus dem Funk­tion­sna­men, alle vier Argu­mente sind Pflicht-Eingaben. Die bei­den let­zten Argu­mente sind der Beginn und das Ende der Nachtschicht und müssen (natür­lich) so übergeben wer­den, dass Excel sie als Zeit inter­pretieren kann.

[NachOben­Let­zte 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.