Como contar o número de valores distintos em um intervalo?

32

Eu tenho uma tabela grande que já está organizada usando filtros, etc. Gostaria de adicionar um resumo abaixo de certas colunas que contêm o número de valores distintos nessa coluna.

Não há função, =COUNTDISTINCT(A2:A100)então o que posso fazer? (Excel 2003)

Não posso usar exatamente as respostas para essa pergunta semelhante porque não quero modificar a tabela ou a filtragem. Preciso de uma adição na planilha, não de uma modificação .

Torben Gundtofte-Bruun
fonte

Respostas:

31
=SUMPRODUCT((A2:A100 <> "")/COUNTIF(A2:A100,A2:A100 & ""))

fará isso sem precisar usar uma fórmula de matriz.

Lance Roberts
fonte
4
Como / por que isso funciona ???
usar o seguinte código
4
@RBarryYoung, SUMPRODUCT funciona como uma função Array sem ser uma. Embora ele possa fazer muito mais do que o que está sendo usado aqui, aqui está apenas verificando todas as instâncias de uma coluna e criando um valor escalado para cada valor distinto, com base em quantas iterações existem na coluna. Portanto, se houvesse duas instâncias de 'a', adicionaria 1/2 e 1/2 para obter 1. Portanto, para cada valor distinto, você adicionará uma à soma.
Lance Roberts
1
Esta é a parte com a qual estou tendo problemas: " apresentar um valor escalado para cada valor distinto, com base em quantas iterações existem na coluna " . Se eu entender isso, o SUMPRODUCT está efetivamente executando um loop como for each [i] in A2:A100 DO:{ sum += (([i]<>"")/COUNTIF(A2:A100,[i])) }, certo ? Estou com um pouco de dificuldade para entender como ele sabe enumerar o parâmetro condicional e o 2º parâmetro COUNTIF, mas não o 1º parâmetro COUNTIF? Esse DWIM-magic está documentado / explicado em qualquer lugar pela MS? Seria bom saber como escrever isso intencionalmente.
precisa saber é o seguinte
1
Sim, você entende, itera uma matriz para o que normalmente seria um valor único, multiplicando todos os seus parâmetros (que neste caso é apenas 1) e adicionando as iterações. SUMPRODUCTs pode ficar muito complexo, mas como uma das funções mais úteis do Excel, pode fazer milagres literais.
Lance Roberts
4
Isso falhará se a entrada contiver entradas em branco. Reparo fácil como demoed no youtube é esta: =SUMPRODUCT((A2:A100<>"")/COUNTIF(A2:A100,A2:A100&"")). Ele garante que COUNTIFnunca retorne um 0 para linhas em branco, o que resultaria em um DIV/0erro.
TPI
7

Encontrei uma solução aqui que parece ser uma maneira indireta incrível de resolvê-la. Mas ei, isso funciona ...

= SUM (SE (COUNTIF (A2: A100, A2: A100) = 0, "", 1 / COUNTIF (A2: A100, A2: A100)))

e então pressione Ctrl+ Shift+ Enter. Pressionar apenas Enterdará o resultado errado.

Torben Gundtofte-Bruun
fonte
Eu adoraria ver outras respostas! Existe uma maneira melhor do que isso para resolvê-lo?
Torben Gundtofte-Bruun 17/09/10
1
Não, essa é a melhor maneira. Não sei por que há um FI lá. Você pode simplesmente usar a matriz = SUM (1 / COUNTIF (A2: A100, A2: A100)) inserida
dkusleika
2
@dkusleika O IF parece estar lá para impedir uma divisão por erro zero. Conforme mencionado na página vinculada acima, isso é necessário se o intervalo contiver células em branco; caso contrário, você poderá deixar o FI de fora.
Bavi_H 19/09/10
1

Este artigo mostra isso para valores de texto:

=SUM(IF(FREQUENCY(IF(LEN(C3:C25)>0,MATCH(C3:C25,C3:C25,0),""), IF(LEN(C3:C25)>0,MATCH(C3:C25,C3:C25,0),""))>0,1))

e isso para valores numéricos:

=SUM(IF(FREQUENCY(C3:C25, C3:C25)>0,1))

Este artigo mostra fórmulas semelhantes, mas também mostra um método usando filtros.

Conte o número de valores exclusivos usando um filtro

Você pode usar o Filtro avançado para extrair os valores exclusivos de uma coluna de dados e colá-los em um novo local. Em seguida, você pode usar a função ROWS para contar o número de itens no novo intervalo.

  1. Verifique se a primeira linha da coluna possui um cabeçalho de coluna.
  2. No menu Dados, aponte para Filtro e clique em Filtro Avançado.
  3. Na caixa de diálogo Filtro avançado, clique em Copiar para outro local.
  4. Se o intervalo que você está contando ainda não estiver selecionado, exclua todas as informações na caixa Intervalo de lista e clique na coluna (ou selecione o intervalo) que contém seus dados.
  5. Na caixa Copiar para, exclua todas as informações da caixa ou clique na caixa e clique em uma coluna em branco na qual deseja copiar os valores exclusivos.
  6. Marque a caixa de seleção Somente registros exclusivos e clique em OK.

    Os valores exclusivos do intervalo selecionado são copiados para a nova coluna.

  7. Na célula em branco abaixo da última célula no intervalo, insira a função ROWS. Use o intervalo de valores exclusivos que você acabou de copiar como argumento. Por exemplo, se o intervalo de valores exclusivos for B1: B45, digite:
    = ROWS (B1: B45)

Pausado até novo aviso.
fonte
1

= SUM (1 / COUNTIF (A2: A100; A2: A100))

Confirme com Ctrl + Shift + Enter

Para cada célula, conta quantas vezes ocorre e resume os inversos de todos esses valores. Suponha que uma string ou número ocorra 5 vezes. Seu inverso é 0,2, que é somado 5 vezes, então 1 é adicionado. No final, fornece o número de valores diferentes.

Nota: não funciona quando ocorrem espaços em branco!

user221470
fonte
0

Experimente este link. Isso mostra como contar valores exclusivos em uma lista, omitindo células em branco.

http://www.functioninexcel.com/lists-arrays/count-unique-values-in-a-list/

= soma (se (frequência (correspondência (lista, lista, 0), correspondência (lista, lista, 0))> 0, 1))

Onde "Lista" é o seu intervalo de células, por exemplo:

Lista = $ A $ 2: $ A $ 12 OR- Lista = deslocamento ($ A $ 1 ,,, correspondência (rept ("z", 255), $ A: $ A))) -OR- Lista = deslocamento ($ A $ 1, ,, correspondência (valor (rept ("9", 255)), $ A: $ A))

Charles Hunt
fonte
0

= SOMA (SE (FREQUÊNCIA (SE (SUBTOTAL (3, DESLOCAMENTO (A2: A100, ROW (A2: A100) -ROW (A2), 0,1))), CORRESPONDÊNCIA ("~" & A2: A100, A2: A100 & " ", 0)), ROW (A2: A100) -ROW (A2) +1), 1))

Certifique-se de pressionar CONTROL + SHIFT + ENTER após colar esta fórmula. Isto é para um intervalo de A2: A100, ajuste o intervalo de acordo.

Vlada
fonte