如何使用公式在列中查找重复项?


11

是否有人想出一个公式来查找列中的重复项?例如:

a
b
c
d
b
d

=somefunction(A1:A6)

输出:

b
d

我知道有一个=unique()功能,基本上是一个=not_unique()功能。想知道是否可以在不使用代码的情况下构造它。


这是该线程中的一个示例stackoverflow.com/questions/19843406/…看一下它可以使您有所了解。
Vembu

等等,您正在寻找的not_unique功能对吗?你似乎在寻找那不是唯一的(重复的)领域,而不是等领域独一无二的。
大卫·穆德

Answers:



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列,并找到与单元格具有相同值的单元格A2A2在复制公式时将其替换为相应的单元格)。
  • counta 计算值(包括非数字)。

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

  • filter将检查column B中的值> 1,并从column中返回相应的值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 values = []对吗?
Jacob Jan Tuinstra 2015年

1
其实没有 values用作键值映射,而不是数组,因此很容易检查我们是否已经处理了特定值- values[property]存在或不存在。
Vidar S. Ramdal

1
我还以为你推到一个数组....我测试你的代码,并不断显示重复的条目,如d,d,d,d ...。您提供的公式解决方案无法做到这一点。
Jacob Jan Tuinstra 2015年

1
我的意思是对象。
雅各布·扬·图因斯特拉

1
@JacobJanTuinstra嗯,是的-我现在明白了。更正了代码。
Vidar S. Ramdal
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.