Página 1 de 1

Como calcular determinados funcionários dentro de uma escala

Enviado: 08 Jun 2016 às 16:27
por AlexandrePorto
Boa tarde amigos,
Estou enviando a planilha pois tentei utilizar CONT.SE e CONT.SES, mas não consegui obter o resultado esperado.
Em uma determinada escala de serviços temos alguns funcionários que a cada dia são substituídos podendo ou não serem repetidos.
Preciso de uma fórmula que me dê a quantidade de dias que determinados funcionários trabalharam juntos e se possível os dias em que trabalharam.

Como calcular determinados funcionários dentro de uma escala

Enviado: 08 Jun 2016 às 17:13
por Parkeless
Boa tarde!

Para retornar a quantidade de vezes, tente inserir a fórmula matricial abaixo na célula O2, e arraste para baixo:
Código: Selecionar todos
=SOMA(SE((SE(SEERRO(LOCALIZAR(J2;$C$2:$C$11&$D$2:$D$11&$E$2:$E$11&$F$2:$F$11&$G$2:$G$11&$H$2:$H$11)>0;0);1;0)>0)*(SE(SEERRO(LOCALIZAR(K2;$C$2:$C$11&$D$2:D$11&$E$2:$E$11&$F$2:$F$11&$G$2:$G$11&$H$2:$H$11)>0;0);1;0)>0)*(SE(SEERRO(LOCALIZAR(L2;$C$2:$C$11&$D$2:$D$11&$E$2:$E$11&$F$2:$F$11&$G$2:$G$11&$H$2:$H$11)>0;0);1;0)>0)*(SE(SEERRO(LOCALIZAR(M2;$C$2:$C$11&$D$2:$D$11&$E$2:$E$11&$F$2:$F$11&$G$2:$G$11&$H$2:$H$11)>0;0);1;0)>0);1;0))
Obs.: Só funciona com CTRL + SHIFT + ENTER.

Para retornar quais os dias, não pensei em outra forma que não por VBA (função personalizada); te atende?


[edit] Para adiantar, já fiz via VBA; estou anexando a aplicação.

Fórmula: = RetornaDia(Intervalo_Procura; Intervalo_Critérios; Intervalo_a_retornar)

Código:
Código: Selecionar todos
Function RetornaDia(Intervalo As Range, Critérios As Range, IntervaloRetorno As Range) As String
Dim cellInt As Range, cellCrit As Range
Dim Contador As Long
Dim linha As Long, Coluna As Long, Crit As Long
Dim TotalAcertos As Long
Dim EmBranco As Long
Dim TotalVírgulas As Long

For Crit = 1 To Critérios.Columns.Count
    If Critérios.Cells(1, Crit) = "" Then
        EmBranco = EmBranco + 1
    End If
Next Crit


Set Intervalo = Intersect(Intervalo, ActiveSheet.UsedRange)
Set IntervaloRetorno = Intersect(IntervaloRetorno, ActiveSheet.UsedRange)

For linha = 1 To Intervalo.Rows.Count
    For Coluna = 1 To Intervalo.Columns.Count
         For Crit = 1 To Critérios.Columns.Count
            If Intervalo.Cells(linha, Coluna) = Critérios.Cells(1, Crit) Then
                Contador = Contador + 1
                Exit For
            End If
        Next Crit
    Next Coluna
    If Contador = Critérios.Columns.Count - EmBranco Then
        TotalAcertos = TotalAcertos + 1
        If TotalAcertos = 1 Then
            RetornaDia = IntervaloRetorno.Cells(linha, 1)
        Else
            RetornaDia = RetornaDia & ", " & IntervaloRetorno.Cells(linha, 1)
        End If
    End If
        
Contador = 0
Next linha

'Contar vírgulas
TotalVírgulas = Len(RetornaDia) - Len(Application.WorksheetFunction.Substitute(RetornaDia, ",", ""))

If TotalVírgulas > 0 Then: RetornaDia = Application.WorksheetFunction.Substitute(RetornaDia, ",", " e", TotalVírgulas)

End Function

Re: Como calcular determinados funcionários dentro de uma es

Enviado: 09 Jun 2016 às 03:02
por DJunqueira
Solução só com função.