Come posso trovare duplicati in una colonna, usando le formule?


11

Qualcuno ha escogitato una formula per trovare duplicati in una colonna? Per esempio:

a
b
c
d
b
d

=somefunction(A1:A6)

Produzione:

b
d

So che c'è una =unique()funzione, è fondamentalmente una =not_unique()funzione. Mi chiedevo se potesse essere costruito senza usare il codice.


Ecco un esempio in questa discussione stackoverflow.com/questions/19843406/… dare un'occhiata a questo che potrebbe darti un'idea.
Vembu,

Aspetta, quello che stai cercando è una not_uniquefunzione giusta? Sembra che tu stia cercando i campi che non sono unici (i duplicati), non i campi che sono unici.
David Mulder,

Risposte:


16

La possibile soluzione senza una colonna aggiuntiva è:

=FILTER(UNIQUE(A2:A7), ARRAYFORMULA( COUNTIF(A2:A7,UNIQUE(A2:A7))>1 ))

Per favore, vedi l'esempio preparato qui: Trova duplicati


3

L'unico modo che ho trovato (usando le formule) è introducendo una nuova countcolonna.

Se i valori sono elencati nella colonna A, a partire dal fila 2, immettere la formula =COUNTA(FILTER(A$2:A$7, A$2:A$7 = A2))in B2e trascinare verso il basso per copiarlo. Questo da:

| A: VALUE  | B: COUNT |
|-----------|----------|
|     a     |     1    |
|     b     |     2    |
|     c     |     1    |
|     d     |     2    |
|     b     |     2    |
|     d     |     2    |

Ora che abbiamo un conteggio delle occorrenze di ciascun valore, possiamo filtrare la Acolonna per valori da B. Nella cella C2, inserisci la formula =UNIQUE(FILTER(A2:A7, B2:B7 > 1)). Questo da:

| A: VALUE  | B: COUNT | C: DUPS |
|-----------|----------|---------|
|     a     |     1    |    b    |
|     b     |     2    |    d    |
|     c     |     1    |         |
|     d     |     2    |         |
|     b     |     2    |         |
|     d     |     2    |         |

Spiegazione delle formule

=COUNTA(FILTER(A$2:A$7, A$2:A$7 = A2))

  • La filterclausola controlla la Acolonna e trova celle che hanno lo stesso valore di cella A2( A2viene sostituita con la cella corrispondente durante la copia della formula).
  • counta conta i valori (inclusi quelli non numerici).

=UNIQUE(FILTER(A2:A7, B2:B7 > 1))

  • Questo filteresamina la colonna Bper i valori che sono > 1e restituisce i valori corrispondenti dalla colonna A. La uniquefunzione semplicemente assicura che restituiamo ogni valore una sola volta, quindi non otteniamo bdue volte, per esempio.

Tuttavia , un modo più elegante sarebbe usare una funzione di script:

function dups(rows) {
  var values = {};
  var duplicates = [];
  for (var i = 0; i < rows.length; i++) {
    var value = rows[i][0];
    if (values[value] !== undefined && duplicates.indexOf(value) == -1) {
      duplicates.push(value);
    } else {
      values[value] = true
    }
  }
  return duplicates;
}

Vai su Strumenti → Script Editor , incolla il codice sopra e salva. Ora puoi chiamare la funzione inserendo la formula =dups(A2:A7)ovunque. Ciò restituisce i duplicati trovati in A2:A7.


Ho creato un foglio di calcolo di esempio per dimostrare entrambe le possibilità , sentitevi liberi di guardarlo e copiarlo.


valori var = {} deve essere valori var = [] giusto?
Jacob Jan Tuinstra,

1
In realtà no. valuesviene utilizzato come una mappa di valori-chiave, non come un array, in modo che sia facile verificare se abbiamo già elaborato un valore specifico - o values[property]esiste o no.
Vidar S. Ramdal,

1
Pensavo che stessi spingendo in un array .... Ho provato il codice e si continua a visualizzare le voci duplicate, come in D, D, D, D ... . La soluzione formula fornita non lo fa.
Jacob Jan Tuinstra,

1
Intendevo oggetto.
Jacob Jan Tuinstra,

1
@JacobJanTuinstra Ah, sì - lo vedo ora. Corretto il codice
Vidar S. Ramdal,
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.