Fórmula do Excel: conte valores de texto exclusivos com critérios -

Índice

Fórmula genérica

(=SUM(--(FREQUENCY(IF(criteria,MATCH(vals,vals,0)),ROW(vals)-ROW(vals.first)+1)>0)))

Resumo

Para contar valores de texto exclusivos em um intervalo com critérios, você pode usar uma fórmula de matriz baseada nas funções FREQUENCY e MATCH. No exemplo mostrado, a fórmula em G6 é:

(=SUM(--(FREQUENCY(IF(C5:C11=G5,MATCH(B5:B11,B5:B11,0)),ROW(B5:B11)-ROW(B5)+1)>0)))

que retorna 3, já que três pessoas diferentes trabalharam no projeto Omega.

Observação: esta é uma fórmula de matriz e deve ser inserida com control + shift + enter.

Explicação

Esta é uma fórmula complexa que usa FREQUENCY para contar valores numéricos derivados com a função MATCH. Trabalhando de dentro para fora, a função MATCH é usada para obter a posição de cada valor que aparece nos dados:

MATCH(B5:B11,B5:B11,0)

O resultado de MATCH é uma matriz como esta:

(1;1;3;1;1;6;7)

Como MATCH sempre retorna a posição da primeira correspondência, os valores que aparecem mais de uma vez nos dados retornam a mesma posição. Por exemplo, como "Jim" aparece 4 vezes na lista, ele aparece nesta matriz 4 vezes como o número 1.

Fora da função MATCH, a função IF é usada para aplicar critérios, que neste caso envolve testar se o projeto é "ômega" (da célula G5):

IF(C5:C11=G5 // filter on "omega"

A função IF atua como um filtro, permitindo apenas a passagem dos valores de MATCH se estiverem associados a "omega". O resultado é uma matriz como esta:

(FALSE;FALSE;FALSE;1;1;6;7) // after filtering

A matriz filtrada é entregue diretamente à função FREQUENCY como o argumento data_array . Em seguida, a função ROW é usada para construir uma lista sequencial de números para cada valor nos dados:

ROW(B3:B12)-ROW(B3)+1

Isso cria uma matriz como esta:

(1;2;3;4;5;6;7;8;9;10)

que se torna o argumento bins_array em FILTER. Neste ponto, temos:

FREQUENCY((FALSE;FALSE;FALSE;1;1;6;7),(1;2;3;4;5;6;7))

FREQÜÊNCIA retorna uma matriz de números que indica uma contagem para cada valor na matriz de dados, organizada por bin. Quando um número já foi contado, FREQUENCY retornará zero. O resultado de FREQUENCY é uma matriz como esta:

(2;0;0;0;0;1;1;0) // result from FREQUENCY

Nota: FREQUENCY sempre retorna uma matriz com um item a mais do que bins_array .

Neste ponto, podemos reescrever a fórmula desta forma:

=SUM(--((2;0;0;0;0;1;1;0)>0))

Verificamos se há valores maiores que zero, o que converte os números em VERDADEIRO ou FALSO:

=SUM(--((TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;FALSE)))

Em seguida, usamos um duplo-negativo para forçar os valores lógicos a 1s e 0s:

=SUM((1;0;0;0;0;1;1;0))

Finalmente, a função SUM retorna 3 como resultado final.

Observação: esta é uma fórmula de matriz e deve ser inserida usando Control + Shift + Enter.

Manipulação de células vazias no intervalo

Se alguma célula do intervalo estiver vazia, você precisará ajustar a fórmula para evitar que células vazias sejam passadas para a função MATCH, o que gerará um erro. Você pode fazer isso adicionando outra função IF aninhada para verificar se há células em branco:

(=SUM(--(FREQUENCY(IF(B5:B11"",IF(C5:C11=G5,MATCH(B5:B11,B5:B11,0))),ROW(B5:B11)-ROW(B5)+1)>0)))

Com dois critérios

Se você tiver dois critérios, poderá estender a lógica da fórmula adicionando outro IF aninhado:

(=SUM(--(FREQUENCY(IF(c1,IF(c2,MATCH(vals,vals,0))),ROW(vals)-ROW(vals.1st)+1)>0)))

Onde c1 = critérios1, c2 = critérios2 e vals = a faixa de valores.

Com lógica booleana

Com a lógica booleana, você pode reduzir IFs aninhados:

(=SUM(--(FREQUENCY(IF((criteria1)*(criteria2),MATCH(vals,vals,0)),ROW(vals)-ROW(vals.1st)+1)>0)))

Isso torna mais fácil adicionar e gerenciar critérios adicionais.

Bons links

Livro de Mike Girvin, Control-Shift-Enter

Artigos interessantes...