A4 ist das Startdatum, B4 ist das Startzeit, C4 ist das Enddatum, D4 ist die Endzeit und E4 ist die Pause die abgerechnet werden muss.
Ich brauche eine Formel die Nachtzeiten richtig berechnet. Folgendes muss passieren. Bei mir gilt Nachtarbeit und die ist normalerweise von 21:01 Uhr bis 6:00 Uhr. Jedoch gibt es zu Sonntagen und Feiertagen spezielle regeln weshalb die nicht mit reinfallen. Nun läuft das so Montag von 4:01 Uhr bis 6:00 Uhr ist Nachtarbeit, Montag 21:01 bis 0:00 ist nachtarbeit, Dienstag 0:00 bis 6:00 ist Nachtarbeit sowie 21:01 bis 0:00, Mittwoch 0:00 Uhr bis 6:00 ist Nachtarbeit, sowie 21:01 bis 0:00, Donnerstag 0:00 bis 6:00 Uhr ist Nachtarbeit, sowie 21:01 bis 0:00 Uhr, Freitag 0:00 bis 6:00 ist Nachtarbeit, sowie 21:01 bis 0:00 und Samstag 0:00 bis 6:00 Uhr ist Nachtarbeit, sowie 21:01 bis 0:00 Uhr. Sonntag gibt es keine nachtarbeit und an feiertagen auch nicht, deshalb sollen die Felder leer bleiben falls die Zeit und/oder das Datum solche bereiche treffen. Alle anderen Zeiten am Tage sind keine Nachtarbeit und sollten auch nicht in das Raster fallen und am besten dann leer bleiben. Falls die Anfangszeit sich in bereich vor den Nachtarbeiten befinden soll erst gezählt werden wann die Nachtarbeit losgeht genauso am Ende wenn die Endzeit länger geht als nachtarbeit soll es nur bis zur endzeit für Nachtarbeit zählen. Z.B. man arbeitet von 18:00 Uhr bis 7:00, dann wird nur die zeit von 21:01 bis 6:00 Uhr als Nachtarbeit gezählt. Feiertage habe ich auf einer extra Tabelle. Wenn Feiertage sind soll Nachtarbeit auch nicht gezählt werden da dort wie sonntags andere regeln gelten und deshalb soll das feld auch leer bleiben. rauskommen sollen halt die Arbeitszeit die Verbracht wurde in den Bedingungen
Ich habe es schon mit verschiedensten Formeln probiert, bekomme am ende entweder ein Wert! fehler oder Name? fehler.
F4: =WEEKDAY(A4) 'Wochentag des Startdatums
G4: =WEEKDAY(C4) 'Wochentag des Enddatums
H4: =IF(OR(F4=1, ISNUMBER(MATCH(A4,Feiertage!$A$1:$A$13,0))), 0,
IF(F4=2, IF(AND(B4="06:00",D4>"04:00"), "06:00"-MAX("04:00",B4), 0) + IF(B4="21:01", "21:01"-B4, 0) + IF(D4>"21:01", D4-"21:01", 0),
IF(F4=7, IF(AND(B4="00:00",D4>"21:01"), "00:00"-MAX("21:01",B4), 0),
IF(AND(B4="21:01",D4>"21:01"), "21:01"-B4 + D4-"21:01", IF(B4="21:01", "21:01"-B4, IF(D4>"21:01", D4-"21:01", 0))))))
Denke das es für nur eine Formel einfach viel zu komplex ist, weshalb ich es auch schon mit hilfstabellen probiert habe, selbes Problem: Nun habe ich es mit VBA probiert und geht es leider auch net. Hier ein beispiel:
Function BerechneNachtarbeit(StartDatum As Date, StartZeit As String, EndDatum As Date, EndZeit As String, Pause As String) As Variant
Dim NachtStunden As Double
Dim aktuellesDatum As Date
Dim NachtStart As Date, NachtEnde As Date, Pausenzeit As Date
'Umwandlung der Zeitstrings in Zeitwerte
StartZeit = TimeValue(StartZeit)
EndZeit = TimeValue(EndZeit)
Pause = TimeValue(Pause)
'Definieren Sie die Nachtarbeitszeiten
NachtStart = TimeValue("21:01")
NachtEnde = TimeValue("06:00")
'Iterieren Sie durch jeden Tag im Datumsbereich
For aktuellesDatum = StartDatum To EndDatum
'Überprüfen Sie, ob das aktuelle Datum ein Sonntag oder Feiertag ist
If Weekday(aktuellesDatum) = 1 Or WorksheetFunction.CountIf(Sheets("Feiertage").Range("$A$1:$A$13"), aktuellesDatum) > 0 Then
'Keine Nachtarbeit an Sonntagen und Feiertagen
Else
'Berechnung der Nachtarbeitsstunden für den aktuellen Tag
If aktuellesDatum = StartDatum Then
'Berechnung für den ersten Tag
If StartZeit = NachtEnde Then
NachtStunden = NachtStunden + WorksheetFunction.Min(NachtEnde, EndZeit) - StartZeit
End If
If StartZeit = NachtStart And EndZeit > NachtStart Then
NachtStunden = NachtStunden + WorksheetFunction.Min(NachtEnde, EndZeit) - NachtStart
End If
ElseIf aktuellesDatum = EndDatum Then
'Berechnung für den letzten Tag
If EndZeit >= NachtStart Then
NachtStunden = NachtStunden + EndZeit - WorksheetFunction.Max(NachtStart, StartZeit)
End If
Else
'Berechnung für Zwischentage
NachtStunden = NachtStunden + NachtEnde - NachtStart
End If
End If
Next aktuellesDatum
'Subtrahieren Sie die Pausenzeit, falls nötig
NachtStunden = NachtStunden - (Pause - Int(Pause))
'Rückgabe der Nachtarbeitsstunden im Format HH:mm
BerechneNachtarbeit = Format(NachtStunden, "hh:mm")
End Function
ich weiß leider net weiter, möglicherweise hat einer von euch ja schon selbiges erlebt und kann mir helfen.