Answers:
无需附加列的可能解决方案是:
=FILTER(UNIQUE(A2:A7), ARRAYFORMULA( COUNTIF(A2:A7,UNIQUE(A2:A7))>1 ))
请在此处查看准备好的示例:查找重复项
我发现(使用公式)的唯一方法是引入一个新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
将检查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
。
我已经建立了一个示例电子表格来演示这两种可能性,可以随意查看并复制它。
values
用作键值映射,而不是数组,因此很容易检查我们是否已经处理了特定值- values[property]
存在或不存在。