
Mi esposa usa Excel para realizar un seguimiento de las horas de trabajo de su equipo, pero todo esto es trabajo manual. ¿Hay alguna manera de permitir que Excel calcule cuando más de 2 personas trabajan en el mismo turno?
Lo complicado es que los turnos de las personas comienzan a diferentes horas pero a veces se superponen.
Los datos son los siguientes (hay muchos más empleados, pero esto muestra la distribución general):
Respuesta1
La idea más simple (también lejos de cualquier optimización o calidad del código):
1) supongamos que podemos ignorar el breve descanso durante (por ejemplo, 10:00-14:00 14:15-18:00 es lo mismo que 10:00-18:00). esto lo hago en variablecambiotomando la primera y la última vez en una celda (y eliminando el colon).
2) cree una matriz de "minutos" en un día del 1 al 2400 (por lo que casi la mitad de la matriz no se usa en absoluto)
3) por cada "minuto" calcula cuántas personas estaban trabajando
Agregamos 1 al inicio del turno; de esta manera no contamos las superposiciones de límites (por ejemplo, si "A" comienza y "B" termina a las 12:00, esto no será una superposición)
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