Tabella pivot semplice per contare valori univoci


134

Sembra una semplice tabella pivot con cui imparare. Vorrei fare un conteggio di valori univoci per un valore particolare su cui sto raggruppando.

Ad esempio, ho questo:

ABC   123
ABC   123
ABC   123
DEF   456
DEF   567
DEF   456
DEF   456

Quello che voglio è una tabella pivot che mi mostra questo:

ABC   1
DEF   2

La semplice tabella pivot che creo mi dà solo questo (un conteggio di quante righe):

ABC   3
DEF   4  

Voglio invece il numero di valori univoci.

Quello che sto davvero cercando di fare è scoprire quali valori nella prima colonna non hanno lo stesso valore nella seconda colonna per tutte le righe. In altre parole, "ABC" è "buono", "DEF" è "cattivo"

Sono sicuro che c'è un modo più semplice per farlo, ma ho pensato di provare la tabella pivot ...


8
Si noti che per le versioni recenti di Excel, questa risposta è più conveniente.
Dennis Jaheruddin,

Risposte:


108

Inserisci una terza colonna e in Cella C2incolla questa formula

=IF(SUMPRODUCT(($A$2:$A2=A2)*($B$2:$B2=B2))>1,0,1)

e copiarlo. Ora crea il tuo pivot in base alla prima e terza colonna. Vedi istantanea

inserisci qui la descrizione dell'immagine


+1 Penso che sia leggermente più semplice della mia soluzione perché non richiede un valore speciale per la prima riga
lc.

2
Bella tecnica. Non sapevo di questo. Puoi fare la stessa cosa con una funzione array =IF(SUM((A$2:A2=A2)*(B$2:B2=B2)) > 1, 0, 1)(premi Ctrl-Maiusc-Invio quando inserisci la formula in modo che acquisisca {}attorno ad essa).
ErikE,

Risposta universale, che non richiede funzionalità specifiche. Solo buone formule semplici.
Alberto De Caro,

Qualche idea su come estenderlo a una situazione con tre colonne?
tumultous_rooster il

13
Si noti che questa risposta NON fornirà la soluzione corretta se si filtrano alcune delle righe utilizzando le opzioni Tabella pivot. Supponiamo che la prima riga sia filtrata. La somma degli ABC apparirà quindi pari a 0!
jarlemag,

250

AGGIORNAMENTO: ora puoi farlo automaticamente con Excel 2013. L'ho creato come una nuova risposta perché la mia risposta precedente risolve effettivamente un problema leggermente diverso.

Se disponi di quella versione, seleziona i tuoi dati per creare una tabella pivot e, quando crei la tabella, assicurati che l'opzione "Aggiungi questi dati al modello di dati" sia selezionata (vedi sotto).

Seleziona la casella accanto a "Aggiungi questi dati al modello di dati"

Quindi, quando si apre la tabella pivot, creare normalmente righe, colonne e valori. Quindi fare clic sul campo di cui si desidera calcolare il conteggio distinto e modificare le Impostazioni valore campo: Modifica le impostazioni del valore del campo

Infine, scorri verso il basso fino all'ultima opzione e scegli "Conteggio distinto". Scegli l'opzione "Conteggio distinto"

Questo dovrebbe aggiornare i valori della tabella pivot per mostrare i dati che stai cercando.


5
@MichaelK è molto meglio, se hai Excel 2013
jrharshath,

3
Questo può essere fatto anche con le tabelle pivot esistenti, quindi non è necessario ricreare oltre 200 tabelle per accedere alla funzionalità di conteggio distinto?
Louisa,

12
Solo un FYI: se non hai ancora salvato il tuo file come file Excel (.xlsx) (ad esempio: hai aperto un file .csv), l'opzione "Aggiungi questi dati al modello di dati" è disattivata / disattivata . La soluzione semplice è salvare il file come file Excel.
PonyEars

9
Questo non è supportato su Mac? Questa opzione non appare per me. Sono sulla versione 15.27.
jkupczak,

4
Questa opzione infatti non esiste su un Mac, poiché i modelli di dati in generale sono solo funzionalità di Windows.
Tomty,

10

Vorrei inserire un'opzione aggiuntiva nel mix che non richiede una formula ma potrebbe essere utile se devi contare valori univoci all'interno del set su due colonne diverse. Usando l'esempio originale, non avevo:

ABC   123  
ABC   123  
ABC   123   
DEF   456  
DEF   567  
DEF   456  
DEF   456

e voglio che appaia come:

ABC   1  
DEF   2

Ma qualcosa di più simile a:

ABC   123  
ABC   123  
ABC   123  
ABC   456  
DEF   123  
DEF   456  
DEF   567  
DEF   456  
DEF   456

e volevo che apparisse come:

ABC  
   123    3  
   456    1  
DEF  
   123    1  
   456    3  
   567    1

Ho trovato il modo migliore per ottenere i miei dati in questo formato e quindi essere in grado di manipolarli ulteriormente era usare il seguente:

inserisci qui la descrizione dell'immagine

Dopo aver selezionato "Esecuzione totale in", scegli l'intestazione per il set di dati secondario (in questo caso sarebbe l'intestazione o il titolo della colonna del set di dati che include 123, 456 e 567). Questo ti darà un valore massimo con il conteggio totale degli articoli in quel set, all'interno del tuo set di dati primario.

Ho quindi copiato questi dati, incollati come valori, quindi li ho inseriti in un'altra tabella pivot per manipolarli più facilmente.

Cordiali saluti, avevo circa un quarto di milione di righe di dati, quindi questo ha funzionato molto meglio di alcuni degli approcci formula, in particolare quelli che provano a confrontare tra due colonne / set di dati perché ha continuato a bloccare l'applicazione.


Ho avuto un problema completamente diverso, ma questa risposta mi ha indicato la giusta direzione. Grazie.
jtolle,

questa risposta si adatta alle mie necessità in quanto ho 500.000 righe di cui ho bisogno per applicare la formula e il mio computer esaurisce la memoria se sto provando. grazie!
cauldyclark

6

Ho trovato che l'approccio più semplice è usare l' Distinct Countopzione sotto Value Field Settings( fare clic con il pulsante sinistro del mouse sul campo nel Valuesriquadro). L'opzione per Distinct Countè in fondo all'elenco.

Posizione in cui fare clic

Ecco il prima (TOP; normale Count) e dopo (BOTTOM; Distinct Count)

CONTARE

CONTE DISTINTO


3
A partire da Office 2016: per poter utilizzare questa funzionalità, è necessario creare una tabella pivot con l'opzione "Aggiungi questi dati al modello di dati" selezionata.
Leone,


3

Non è necessario che la tabella venga ordinata per la seguente formula per restituire un 1 per ciascun valore univoco presente.

supponendo che l'intervallo della tabella per i dati presentati nella domanda sia A1: B7 inserisci la seguente formula nella cella C1:

=IF(COUNTIF($B$1:$B1,B1)>1,0,COUNTIF($B$1:$B1,B1))

Copia quella formula in tutte le righe e l'ultima riga conterrà:

=IF(COUNTIF($B$1:$B7,B7)>1,0,COUNTIF($B$1:$B7,B7))

Ciò comporta un 1 che viene restituito la prima volta che viene trovato un record e 0 per tutte le volte successive.

Basta sommare la colonna nella tabella pivot


2
Se hai un set di dati di grandi dimensioni, usa =IF(COUNTIF($B$1:$B1,B1),1,0)- in questo modo, countif viene eseguito solo una volta!
Peter Albert

2

Il mio approccio a questo problema era un po 'diverso da quello che vedo qui, quindi condividerò.

  1. (Crea prima una copia dei tuoi dati)
  2. Concatena le colonne
  3. Rimuovere i duplicati sulla colonna concatenata
  4. Ultimo: pivot sul set risultante

Nota: vorrei includere immagini per renderlo ancora più facile da capire ma non posso perché questo è il mio primo post;)


1

La risposta di Siddharth è eccezionale.

Tuttavia , questa tecnica può causare problemi quando si lavora con un ampio set di dati (il mio computer si è bloccato su 50.000 righe). Alcuni metodi meno intensivi per il processore:

Singolo controllo di unicità

  1. Ordina per due colonne (A, B in questo esempio)
  2. Utilizzare una formula che esamina meno dati

    =IF(SUMPRODUCT(($A2:$A3=A2)*($B2:$B3=B2))>1,0,1) 
    

Controlli multipli di unicità

Se devi verificare l'unicità in colonne diverse, non puoi fare affidamento su due tipi.

Anziché,

  1. Ordina colonna singola (A)
  2. Aggiungi la formula che copre il numero massimo di record per ciascun raggruppamento. Se ABC potrebbe avere 50 righe, la formula sarà

    =IF(SUMPRODUCT(($A2:$A49=A2)*($B2:$B49=B2))>1,0,1)
    

2
Un altro modo forse meno intensivo per il processore è aggiungere una colonna C e in C2 =A2&B2. Quindi aggiungere una colonna D e in D2 put =IF(MATCH(C2, C$2:C2, 0) = ROW(C1), 1, 0). Riempi entrambi. Mentre questo continua a cercare dall'inizio dell'intero intervallo, si ferma quando trova il primo, e invece di moltiplicare i valori da 50.000 righe insieme deve solo individuare il valore, quindi dovrebbe funzionare molto meglio.
ErikE,

@ErikE Sharp - Penso anche che la tua tecnica si fermi al primo ritrovamento. Ma se hai molti valori univoci in C (esempio: solo 50 ABC), continuerai a controllare enormi quantità di dati. Funzionalità interessante: la tua formula funziona meglio quando i dati non sono ordinati.
workglide,

1

Excel 2013 può fare il conteggio distinto in perni. Se non ho accesso al 2013, ed è una quantità minore di dati, faccio due copie dei dati grezzi e nella copia b, seleziono entrambe le colonne e rimuovo i duplicati. Quindi crea il perno e conta la colonna b.


1

Puoi utilizzare COUNTIFS per più criteri,

= 1 / COUNTIFS (A: A, A2, B: B, B2) e quindi trascinare verso il basso. Puoi inserire tutti i criteri che desideri, ma ci vuole molto tempo per l'elaborazione.


1

Passaggio 1. Aggiungi una colonna

Passaggio 2. Utilizzare la formula = IF(COUNTIF(C2:$C$2410,C2)>1,0,1)nel 1 ° record

Passaggio 3. Trascinarlo su tutti i record

Passaggio 4. Filtra '1' nella colonna con la formula


0

È possibile effettuare una colonna aggiuntiva per memorizzare l'unicità, quindi riassumere che nella vostra tabella pivot.

Quello che voglio dire è che cellulare C1dovrebbe essere sempre 1. La cella C2dovrebbe contenere la formula =IF(COUNTIF($A$1:$A1,$A2)*COUNTIF($B$1:$B1,$B2)>0,0,1). Copia questa formula verso il basso in modo che la cella C3contenga =IF(COUNTIF($A$1:$A2,$A3)*COUNTIF($B$1:$B2,$B3)>0,0,1)e così via.

Se hai una cella di intestazione, ti consigliamo di spostarli tutti in una riga e la tua C3formula dovrebbe essere =IF(COUNTIF($A$2:$A2,$A3)*COUNTIF($B$2:$B2,$B3)>0,0,1).


0

Se hai i dati ordinati .. ti suggerisco di usare la seguente formula

=IF(OR(A2<>A3,B2<>B3),1,0)

Questo è più veloce in quanto utilizza meno celle per calcolare.


0

Di solito ordino i dati per il campo che devo fare per il conteggio distinto, quindi uso IF (A2 = A1,0,1); ottieni quindi un 1 nella riga superiore di ogni gruppo di ID. Semplice e non richiede tempo per il calcolo su set di dati di grandi dimensioni.


0

Puoi anche usare la colonna helper VLOOKUP. Ho provato e sembra un po 'più veloce di COUNTIF.

Se si utilizza l'intestazione e i dati iniziano nella cella A2, quindi in qualsiasi cella della riga utilizzare questa formula e copiare in tutte le altre celle nella stessa colonna:

=IFERROR(IF(VLOOKUP(A2;$A$1:A1;1;0)=A2;0;1);1)

-3

Ho trovato un modo più semplice per farlo. Facendo riferimento all'esempio di Siddarth Rout, se voglio contare valori univoci nella colonna A:

  • aggiungi una nuova colonna C e riempi C2 con la formula "= 1 / COUNTIF ($ A: $ A, A2)"
  • trascina la formula verso il basso sul resto della colonna
  • perno con la colonna A come etichetta di riga e somma {colonna C) in valori per ottenere il numero di valori univoci nella colonna A

Logicamente questo non può funzionare per l'OP perché non guarda la colonna B. Come lo adatterai per lavorare con più colonne?
ErikE,
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.