Come contare il numero di valori distinti in un intervallo?


32

Ho una grande tabella che è già organizzata usando i filtri, ecc. Vorrei aggiungere un riepilogo sotto alcune colonne che contengono il numero di valori distinti in quella colonna.

Non c'è alcuna funzione, =COUNTDISTINCT(A2:A100)quindi cosa posso fare invece? (Excel 2003)

Non posso usare esattamente le risposte a questa domanda simile perché non voglio modificare la tabella o il filtro. Ho bisogno di un'aggiunta nel foglio di lavoro, non di una modifica .

Risposte:


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

lo farà senza dover usare una formula di matrice.


4
Come / perché funziona ???
RBarryYoung,

4
@RBarryYoung, SUMPRODUCT funziona come una funzione Array senza esserlo. Mentre può fare molto di più di quello per cui viene utilizzato qui, qui sta solo controllando ogni istanza di una colonna e trovando un valore in scala per ciascun valore distinto in base a quante iterazioni ci sono nella colonna. Quindi, se ci fossero due istanze di 'a', aggiungerebbe 1/2 e 1/2 per ottenere 1. Quindi per ogni valore distinto, si aggiungerà uno alla somma.
Lance Roberts,

1
Questa è la parte con cui ho problemi: "trovare un valore in scala per ogni valore distinto in base a quante iterazioni ci sono nella colonna. " Se capisco questo, allora SUMPRODUCT sta effettivamente eseguendo un ciclo come for each [i] in A2:A100 DO:{ sum += (([i]<>"")/COUNTIF(A2:A100,[i])) }, giusto ? Sto riscontrando un po 'di difficoltà nel capire come sa enumerare sia il parametro condizionale che il secondo parametro COUNTIF, ma non il primo parametro COUNTIF? Questo DWIM-magic è documentato / spiegato ovunque dalla SM? Sarebbe bello sapere come scriverli intenzionalmente.
RBarryYoung,

1
Sì, hai capito, itera un array per quello che normalmente sarebbe un singolo valore, moltiplicando tutti i suoi parametri (che in questo caso è solo 1), quindi aggiungendo le iterazioni. I SUMPRODUCT possono diventare molto complessi, ma sono una delle funzioni più utili in Excel, possono fare miracoli letterali.
Lance Roberts,

4
Ciò non riesce se l'input contiene voci vuote. Facile correzione come demoed su youtube è questo: =SUMPRODUCT((A2:A100<>"")/COUNTIF(A2:A100,A2:A100&"")). Assicura che COUNTIFmai restituisca uno 0 per le righe vuote, il che comporterebbe un DIV/0errore.
cfi,

7

Ho trovato una soluzione qui che sembra essere un modo incredibile per risolverlo. Ma hey, funziona ...

= SOMMA (IF (COUNTIF (A2: A100, A2: A100) = 0, "", 1 / COUNTIF (A2: A100, A2: A100)))

e quindi premere Ctrl+ Shift+ Enter. Premendo solo si Enterotterrà un risultato errato.


Mi piacerebbe vedere altre risposte! C'è un modo migliore di questo per risolverlo?
Torben Gundtofte-Bruun,

1
No, questo è il modo migliore. Non sono sicuro del perché ci sia un IF lì. Puoi semplicemente usare = SUM (1 / COUNTIF (A2: A100, A2: A100)) array inserito
dkusleika,

2
@dkusleika L'IF sembra essere lì per impedire una divisione per errore zero. Come menzionato nella pagina collegata sopra, questo è necessario se l'intervallo contiene celle vuote, altrimenti è possibile escludere l'IF.
Bavi_H,


1

Questo articolo mostra questo per i valori di testo:

=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 questo per i valori numerici:

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

Questo articolo mostra formule simili, ma mostra anche un metodo che utilizza i filtri.

Contare il numero di valori univoci utilizzando un filtro

È possibile utilizzare il filtro avanzato per estrarre i valori univoci da una colonna di dati e incollarli in una nuova posizione. Quindi è possibile utilizzare la funzione ROWS per contare il numero di elementi nel nuovo intervallo.

  1. Assicurarsi che la prima riga nella colonna abbia un'intestazione di colonna.
  2. Dal menu Dati, scegliere Filtro, quindi Filtro avanzato.
  3. Nella finestra di dialogo Filtro avanzato, fare clic su Copia in un'altra posizione.
  4. Se l'intervallo che stai contando non è già selezionato, elimina tutte le informazioni nella casella Intervallo elenco, quindi fai clic sulla colonna (o seleziona l'intervallo) che contiene i tuoi dati.
  5. Nella casella Copia in, eliminare tutte le informazioni nella casella o fare clic nella casella e quindi fare clic su una colonna vuota in cui si desidera copiare i valori univoci.
  6. Selezionare la casella di controllo Solo record univoci e fare clic su OK.

    I valori univoci dell'intervallo selezionato vengono copiati nella nuova colonna.

  7. Nella cella vuota sotto l'ultima cella dell'intervallo, immettere la funzione ROWS. Utilizzare l'intervallo di valori univoci appena copiati come argomento. Ad esempio, se l'intervallo di valori univoci è B1: B45, immettere:
    = ROWS (B1: B45)


1

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

Confermare con Ctrl + Maiusc + Invio

Per ogni cella, conta quante volte si verifica e somma le inversioni di tutti questi valori. Supponiamo che occorra una stringa o un numero di occus 5 volte. Il suo inverso è 0,2 che viene sommato 5 volte, quindi viene aggiunto 1. Alla fine fornisce il numero di valori diversi.

Nota: non funziona quando si verificano spazi vuoti!


0

Prova questo link. Questo mostra come contare valori univoci in un elenco omettendo celle vuote.

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

= sum (if (frequenza (match (List, List, 0), match (List, List, 0))> 0, 1))

Dove "Elenco" è il tuo intervallo di celle, ad esempio:

Elenco = $ A $ 2: $ A $ 12 OR- Elenco = offset ($ A $ 1 ,,, match (rept ("z", 255), $ A: $ A)) -OR- Elenco = offset ($ A $ 1, ,, match (valore (rept ("9", 255)), $ A: $ A))


0

= SUM (IF (FREQUENZA (IF (TOTALE PARZIALE (3, OFFSET (A2: A100, ROW (A2: A100) -ROW (A2), 0,1)), MATCH ( "~" e A2: A100, A2: A100 &" ", 0)), ROW (A2: A100) -ROW (A2) +1), 1))

Assicurati di premere CONTROL + MAIUSC + INVIO dopo aver incollato questa formula. Questo è per un intervallo di A2: A100, regolare l'intervallo di conseguenza.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.