Berechnung von Nachtarbeitsstunden mit Access und VBA

Berechnung von Nachtarbeitsstunden mit Access und VBA

Berechnung von Nachtarbeitsstunden mit Access und VBA

In einen Access-Projekt stand die Berechnung von Nachtarbeitsstunden mit Access und VBA als Aufgabe an. Die Nachtarbeitsstunden sollten später gesondert ausgewiesen werden. Bei einer sehr flexible Arbeitszeiteinteilung, mit Unterbrechungen und Mehrarbeitsstunden zeigte sich, daß der Anteil der Nachtarbeitsstunden periodisch sehr unterschiedlich liegen kann.

Die erste Überlegung ging dahin, zu ermitteln, welcher Anteil einer Zeitperiode 1 (Arbeitszeit) sich in einer Zeitperiode 2 (Nachtstunden) befindet.

Dabei fällt auf, daß es 9 verschiedene Möglichkeiten gibt:

 

Berechnung von Nachtarbeitsstunden mit Access und VBA

Nacht MorgensTagNacht AbendsNacht MorgensTag
BeginnEnde
BeginnEnde
BeginnEnde
BeginnEnde
BeginnEnde
BeginnEnde
BeginnEnde
BeginnEnde
BeginnEnde

Mit der folgenden Funktion konnte die Berechnung realisiert werden.

Function NightHours(SW, EW)
    ' SW = Uhrzeit Arbeitsbeginn
    ' EW = Uhrzeit Arbeitsende
    If BeginNight = 0 Then BeginNight = TimeValue(ReadParameter("BeginNight", "Date"))
    If EndOfNight = 0 Then EndOfNight = TimeValue(ReadParameter("EndOfNight", "Date"))
     
    If (TimeValue(SW) &gt; BeginNight Or TimeValue(SW) < EndOfNight Or TimeValue(EW) < EndOfNight Or TimeValue(EW) > BeginNight) Then
        S = DateValue(SW) + BeginNight
        E = DateValue(EW) + EndOfNight
        If TimeValue(SW) < EndOfNight And TimeValue(EW) > BeginNight Then
            S1 = SW
            E1 = EndOfNight
            S2 = BeginNight
            E2 = EW
            NightHours = DateDiff("n", S1, E1) + DateDiff("n", S2, E2)
        Else
            If TimeValue(EW) > BeginNight Then E = EW
            If TimeValue(SW) > BeginNight Then S = SW
            If TimeValue(SW) < EndOfNight Then S = SW
            If TimeValue(EW) < EndOfNight Then E = EW
            NightHours = DateDiff("n", S, E)
        End If
    End If
End Function

Die Funktion gibt den Anteil Nachtarbeitsstunden in Minuten zurück.