Berechnung der Doppelstationszeiten

Berechnung der Doppelstationszeiten

Meine Frau verwendet Excel, um die Arbeitszeiten ihres Teams zu erfassen, aber das ist alles Handarbeit. Gibt es eine Möglichkeit, Excel berechnen zu lassen, wenn mehr als 2 Personen in derselben Schicht arbeiten?

Das Schwierige dabei ist, dass die Schichten der Mitarbeiter zu unterschiedlichen Zeiten beginnen und sich teilweise überschneiden.

Die Daten sehen folgendermaßen aus (es gibt viel mehr Mitarbeiter, aber dies zeigt das allgemeine Layout):

Bildbeschreibung hier eingeben

Antwort1

Die einfachste Idee (auch weit entfernt von jeglicher Optimierung oder Codequalität):

1) Angenommen, wir können die kurze Pause während der Zeit ignorieren (z. B. 10:00-14:00 14:15-18:00 ist dasselbe wie 10:00-18:00). Ich mache das in der VariableSchichtindem man das erste und letzte Mal in einer Zelle nimmt (und den Doppelpunkt entfernt).

2) Erstellen Sie ein Array von „Minuten“ in einem Tag von 1 bis 2400 (so dass fast die Hälfte des Arrays überhaupt nicht verwendet wird)

3) Berechnen Sie für jede "Minute", wie viele Personen gearbeitet haben

Wir addieren 1 zum Schichtbeginn - auf diese Weise zählen wir Grenzüberschneidungen nicht mit (wenn beispielsweise "A" um 12:00 beginnt und "B" um 12:00 endet, handelt es sich nicht um eine Überschneidung)

Function shiftOverlaps(r As Range) As Integer
    Dim shiftStart As Integer
    Dim shiftEnd As Integer
    Dim shift As String
    Dim wholeDay(1 To 2400) As Integer

    shiftOverlaps = 0        

    For Each c In r
        shift = Replace(Left(Trim(c.Value), 5) & " " & Right(Trim(c.Value), 5), ":", "")
        If shift <> " " Then
            shiftStart = Left(shift, 4) + 1
            shiftEnd = Right(shift, 4)
            For i = 1 To 2400
                If i >= shiftStart And i <= shiftEnd Then
                    wholeDay(i) = wholeDay(i) + 1
                    If wholeDay(i) > shiftOverlaps Then
                        shiftOverlaps = wholeDay(i)
                    End If
                End If
            Next i
        End If
    Next c

    shiftOverlaps = shiftOverlaps - 1

End Function

Ergebnis für Ihr Beispiel

verwandte Informationen