
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):
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