
Minha esposa usa o Excel para controlar o horário de trabalho de sua equipe, mas tudo isso é trabalho manual. Existe uma maneira de permitir que o Excel calcule quando mais de duas pessoas trabalham no mesmo turno?
O complicado é que os turnos das pessoas começam em horários diferentes, mas às vezes se sobrepõem.
Os dados são os seguintes (há muito mais funcionários, mas isso mostra o layout geral):
Responder1
A ideia mais simples (também longe de qualquer otimização ou qualidade de código):
1) suponha que podemos ignorar o pequeno intervalo durante (por exemplo, 10h00-14h00, 14h15-18h00 é o mesmo que 10h00-18h00). Eu faço isso na variávelmudançatomando a primeira e a última vez em uma célula (e removendo os dois pontos).
2) crie uma matriz de "minutos" em um dia de 1 a 2.400 (para que quase metade da matriz não seja usada)
3) para cada “minuto” calcule quantas pessoas estavam trabalhando
Adicionamos 1 ao início do turno - desta forma não contamos sobreposições de limites (por exemplo, se "A" começar e "B" terminar às 12h, isso não será uma sobreposição)
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