Supondo que seus dados estejam nas colunas A
a C
, começando na linha 2, você pode usar essa "fórmula de matriz" em D2
=SUM(IF(FREQUENCY(IF(B$2:B$16<=B2,IF(C$2:C$16>=B2,MATCH(A$2:A$16,A$2:A$16,0))),ROW(A$2:A$16)-ROW(A$2)+1),1))
confirmado com CTRL + SHIFT + ENTER e copiado na coluna
Explicação:
Esta é uma técnica comum usada para obter uma contagem de valores diferentes em uma coluna (neste caso, usuários) onde alguns critérios são atendidos em outras colunas (neste caso, a data / hora de início mais recente é entre a hora de início / data e hora final / data em outras colunas).
O "array de dados" para FREQUENCY
é o resultado da função MATCH
para as linhas nas quais os critérios de tempo são atendidos - e MATCH
encontrará o valor de correspondência primeiro , portanto onde você tem usuários repetidos MATCH
retorna o mesmo número para cada (e você recebe FALSE
para linhas onde as condições não são atendidas)
Os FREQUENCY
"bins" consistem em todos os resultados possíveis para MATCH
(1 a 15 neste caso), portanto, se as condições (que a banda de tempo contém a hora de início mais recente) forem atendidas e o usuário for o mesmo, o mesmo número é retornado na matriz de dados e vai no mesmo bin
...... , então é suficiente contar o número de categorias que são > 0 para obter uma contagem de diferentes usuários.
Especificamente para a linha 2, por exemplo, a matriz de dados se torna isso:
{1;2;3;4;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE}
e os 4 valores diferentes são retornados para 4 caixas diferentes, então você obtém um resultado de 4
.... mas para a linha 10 a matriz de dados se torna isso:
{FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;9;9;FALSE;9;FALSE;FALSE;FALSE}
onde há 3 linhas que correspondem às condições de tempo ..... mas todas para o mesmo usuário ( CT
), então a função MATCH
retorna 9 (a posição da primeira entrada "CT" em A2:A16
) para todos os três, então FREQUENCY
obtém 3 valores no mesmo bin, então a fórmula resolve isso:
=SUM(IF({0;0;0;0;0;0;0;0;3;0;0;0;0;0;0;0},1))
A função IF
retorna um 1 para cada valor diferente de zero na matriz retornada por FREQUENCY
e SUM
soma esses 1s ..... mas há apenas um valor diferente de zero, então o resultado é 1
(representando o número de diferentes usuários com sessões abertas naquele momento)
Veja a captura de tela em anexo