Calculando os tempos da ala dupla

0

Minha esposa usa o Excel para acompanhar as horas de trabalho de sua equipe, mas tudo isso é trabalho manual. Existe uma maneira de deixar o Excel calcular quando mais de duas pessoas estão trabalhando no mesmo turno?

O mais complicado é que o turno das pessoas começa em horas diferentes, mas às vezes se sobrepõem.

Os dados são exibidos da seguinte maneira (há muito mais funcionários, mas isso mostra o layout geral):

    
por Benjamin Diele 26.01.2017 / 19:57

1 resposta

1

A ideia mais simples (também longe de qualquer otimização ou qualidade de código):

1) suponha que podemos ignorar o intervalo curto durante (por exemplo, 10: 00-14: 00 14: 15-18: 00 é o mesmo que 10: 00-18: 00). Eu faço isso na variável shift , pegando 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 2400 (então quase metade da matriz não é usada)

3) para cada "minuto" calcule quantas pessoas estavam trabalhando

Adicionamos 1 para iniciar a mudança - dessa forma, não contabilizamos sobreposições de limite (por exemplo, se "A" for iniciado e "B" terminar às 12:00, 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

Resultado para o seu exemplo

    
por 26.01.2017 / 23:42