Jak znaleźć duplikaty w kolumnie za pomocą formuł?

11

Czy ktoś wymyślił formułę, aby znaleźć duplikaty w kolumnie? Na przykład:

a
b
c
d
b
d

=somefunction(A1:A6)

Wynik:

b
d

Wiem, że jest =unique()funkcja, to po prostu =not_unique()funkcja. Zastanawiałem się, czy można go zbudować bez użycia kodu.

Jason
źródło
Oto jeden przykład w tym wątku stackoverflow.com/questions/19843406/... rzuć okiem na to, co może dać ci jakiś pomysł.
Vembu,
Czekaj, to czego szukasz to not_uniquefunkcja, prawda? Wygląda na to, że szukasz pól, które nie są unikalne (duplikaty), a nie pól, które unikalne.
David Mulder,

Odpowiedzi:

16

Możliwe rozwiązanie bez dodatkowej kolumny to:

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

Zobacz przygotowany przykład tutaj: Znajdź duplikaty

Ilya Lapitan
źródło
3

Jedyny sposób, jaki znalazłem (używając formuł), to wprowadzenie nowej countkolumny.

Jeśli wartości są wymienione w kolumnie A, zaczynając od wiersza 2, wprowadź formułę =COUNTA(FILTER(A$2:A$7, A$2:A$7 = A2))do B2i przeciągnij w dół, aby ją skopiować. To daje:

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

Teraz, gdy mamy liczbę wystąpień każdej wartości, możemy filtrować Akolumnę według wartości B. W komórce C2wstaw formułę =UNIQUE(FILTER(A2:A7, B2:B7 > 1)). To daje:

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

Objaśnienie wzorów

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

  • filterPunkt kontroluje Akolumny i znajduje komórek, które mają taką samą wartość, jak komórki A2( A2zastępuje się odpowiednią komórkę podczas kopiowania wzoru).
  • counta zlicza wartości (w tym nienumeryczne).

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

  • To filtersprawdza kolumnę pod Bkątem wartości > 1i zwraca odpowiednie wartości z kolumny A. uniqueFunkcja po prostu sprawia, że na pewno mamy tylko wrócić każdej wartości raz, tak Do not dostajemy bdwa razy, na przykład.

Jednak , bardziej elegancki sposób byłoby użyć funkcji skryptu:

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;
}

Przejdź do Narzędzia → Edytor skryptów , wklej powyższy kod i zapisz. Możesz teraz wywołać funkcję, wprowadzając formułę w =dups(A2:A7)dowolnym miejscu. Zwraca duplikaty znalezione w A2:A7.


Przygotowałem przykładowy arkusz kalkulacyjny, aby zademonstrować obie możliwości , nie krępuj się i spójrz na nie i skopiuj.

Vidar S. Ramdal
źródło
var values ​​= {} musi być var values ​​= [] prawda?
Jacob Jan Tuinstra,
1
Właściwie nie. valuesjest używany jako mapa klucz-wartość, a nie tablica, dzięki czemu łatwo jest sprawdzić, czy już przetworzyliśmy określoną wartość - albo values[property]istnieje, albo nie.
Vidar S. Ramdal,
1
Myślałam, że pcha do tablicy .... Przetestowałem kod i utrzymuje pokazując zduplikowane wpisy, tak jak w d, d, d, d ... . Podane rozwiązanie formuły tego nie robi.
Jacob Jan Tuinstra,
1
Miałem na myśli przedmiot.
Jacob Jan Tuinstra
1
@JacobJanTuinstra Ach, tak - teraz to widzę. Poprawiono kod
Vidar S. Ramdal,