Як я можу знайти дублікати у стовпці, використовуючи формули?


11

Хтось придумав формулу, щоб знайти дублікати у стовпці? Наприклад:

a
b
c
d
b
d

=somefunction(A1:A6)

Вихід:

b
d

Я знаю, що є =unique()функція, це в основному =not_unique()функція. Цікаво, чи можна його побудувати без використання коду.


Ось один із прикладів цього потоку stackoverflow.com/questions/19843406/… подивіться на це, що може дати вам уявлення.
Вембу

Зачекайте, що ви шукаєте, це not_uniqueфункція? Ви ніби шукаєте поля, які не є унікальними (дублікати), а не поля, які є унікальними.
Девід Малдер

Відповіді:



3

Єдиний спосіб, який я знайшов (використовуючи формули) - це введення нового countстовпця.

Якщо ваші значення вказані в стовпці A, починаючи з рядка 2, введіть формулу =COUNTA(FILTER(A$2:A$7, A$2:A$7 = A2))в B2і перетягніть вниз, щоб скопіювати її. Це дає:

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

Тепер, коли у нас є кількість випадків кожного значення, ми можемо відфільтрувати Aстовпчик за значеннями B. У комірку C2вставити формулу =UNIQUE(FILTER(A2:A7, B2:B7 > 1)). Це дає:

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

Пояснення формул

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

  • filterРозділ перевіряє Aстовпець, і знаходить клітини , які мають таке ж значення , як осередок A2( A2замінюється відповідної осередком при копіюванні формули).
  • counta підраховує значення (включаючи нечислові).

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

  • Це filterвивчає стовпчик Bна значення, які є > 1, і повертає відповідні значення з стовпця A. uniqueФункція просто робить , що ми тільки повернути кожне значення один раз, так що ми не зможемо скористатися в bдва рази, наприклад.

Однак більш елегантним способом було б використання функції скрипту:

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

Перейдіть до Інструменти → Редактор сценаріїв , вставте вищевказаний код і збережіть. Тепер ви можете викликати функцію, ввівши формулу в =dups(A2:A7)будь-якому місці. Це повертає дублікати, знайдені в A2:A7.


Я створив приклад електронної таблиці, щоб продемонструвати обидві можливості , сміливо дивіться на неї та копіюйте.


var values ​​= {} має бути значенням var = = [] правда?
Яків Ян Туінстра

1
Власне, ні. valuesвикористовується як карта ключових значень, а не масив, так що легко перевірити, чи обробили ми вже певне значення - чи values[property]існує, чи немає.
Відар С. Рамдал

1
Я думав , що ви штовхали в масив .... Я перевірив ваш код і він продовжує показувати повторювані записи, як в D, D, D, D ... . Надане вами формульне рішення не робить цього.
Яків Ян Туінстра,

1
Я мав на увазі об’єкт.
Яків Ян Туінстра

1
@JacobJanTuinstra Ага, так - я це бачу зараз. Виправлено код.
Відар С. Рамдал
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.