Как найти дубликаты в столбце, используя формулы?


11

Кто-нибудь придумал формулу для поиска дубликатов в столбце? Например:

a
b
c
d
b
d

=somefunction(A1:A6)

Вывод:

b
d

Я знаю, что есть =unique()функция, это в основном =not_unique()функция. Было интересно, если это может быть построено без использования кода.


Вот один пример из этой ветки stackoverflow.com/questions/19843406/… посмотрите на это, что может дать вам некоторую идею.
Vembu

Подождите, что вы ищете, это 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.


Я создал пример электронной таблицы, чтобы продемонстрировать обе возможности , не стесняйтесь смотреть и копировать ее.


значения переменной = {} должны быть значениями переменной = [] верно?
Джейкоб Ян Туинстра

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

1
Я думал , что вы толкали в массив .... Я проверил ваш код и он продолжает показывать повторяющиеся записи, как в D, D, D, D ... . Решение с формулой, которое вы предоставили, этого не делает.
Джейкоб Ян Туинстра

1
Я имел в виду объект.
Джейкоб Ян Туинстра

1
@JacobJanTuinstra Ах, да - теперь я это вижу. Исправил код.
Видар С. Рамдал
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.