跳到主要内容

重复值查重与去重的三种姿势

一份名单里同一批客户被录了两次、同一个手机号对应两个名字——查重和去重是数据整理绕不开的一步。这篇讲三种做法,以及它们各自适合什么场合。

一、条件格式:只标记,不改数据​

选中 A 列(或整个区域)→ 开始 → 条件格式 → 突出显示单元格规则 → 重复值。

默认把重复项标红。要只标"第二次及以后出现"(即保留第一条不标),用公式规则:

=AND($A2<>"",COUNTIF($A$2:$A2,$A2)>1)

关键在 $A$2:$A2 这个逐渐扩大的区域:判断第一条时只比第一行,判断第 10 条时比前 9 行,所以第一次出现不会被标。

这个规则的优点是完全不动原数据,适合先看清重复情况再决定怎么处理。

二、COUNTIF 定位:找出全部重复​

在辅助列写:

=COUNTIF($A$2:$A$1000,A2)

结果是 1 表示唯一,大于 1 表示重复。配合筛选:

  • 筛 >1:看到所有重复的记录;
  • 筛 =1:得到唯一的记录。

想直接写"是否重复":

=IF(COUNTIF($A$2:$A$1000,A2)>1,"重复","唯一")

COUNTIF 对文本不区分大小写(abc 和 ABC 算同一个),需要区分时用 EXACT:

=SUMPRODUCT(--EXACT($A$2:$A$1000,A2))

三、删除重复项:一键去重​

数据 → 删除重复值 → 勾选用于判断的列。

要点:

  • 可以多列组合判断,比如"姓名 + 手机号"一起相同才算重复;
  • 默认保留第一次出现的记录,删除其后的;
  • 操作不可撤销(撤销按钮是灰的),先复制一份工作表。

如果只想保留"金额最大的一条",删除重复项做不到。这时要按金额降序排,再删重复——排序后第一条就是最大的。

四、比"重复"更复杂的:模糊重复​

现实里更难的是"张 三"和"张三 "、138-0013-8000 和 13800138000 这种。

先做清洗(见"文本清洗三件套"),再判重:

=IF(COUNTIF($A$2:$A$1000,TRIM(B2))>0,"重复","唯一")

再进一步是相似度匹配,比如"北京雅铭网络科技"和"雅铭网络"。Excel 没有内置相似度函数,可用 SEARCH 做包含判断:

=IF(SUMPRODUCT(--ISNUMBER(SEARCH($A$2:$A$100,B2)))>0,"疑似重复","新记录")

这把"旧名单里的值是否是待查值的一部分"作为判断,粒度粗但够用。真正要做相似度,得上 Power Query 的模糊合并或专门工具。

五、去重后统计​

COUNTA / SUMPRODUCT 数不重复个数:

=SUMPRODUCT(1/COUNTIF($A$2:$A$100,$A$2:$A$100))

前提是区域内不能有空单元格,空值会让 COUNTIF 返回 0,引发除零错误。区域有空值时用:

=SUMPRODUCT(($A$2:$A$100<>"")/COUNTIF($A$2:$A$100,$A$2:$A$100&""))

365 版本直接 =COUNTA(UNIQUE(A2:A100)) 更清楚。

六、什么时候该用 Power Query​

行数过万、需要每月重复做、要多表比对时,手工去重不是长久之计。Power Query 的做法:

  1. 数据 → 获取数据 → 从表格;
  2. 选中列 → 删除重复项;
  3. 关闭并上载。

以后源数据变了,右键刷新即可。判断要不要上 Power Query 的标准很简单:同一个操作这个月已经做过一次,下个月还要做。

七、常见坑​

现象原因处理
明明不同却判为重复有不可见空格先 TRIM(CLEAN())
明明相同却不算重复一个文本一个数值统一类型
删除重复后行数没变判断列勾错重新勾选判断列
撤销按钮变灰删除重复不可撤销提前备份
去重后公式全乱行被删除导致引用错位先转值再做

八、速查​

需求做法
只看不改条件格式 + =COUNTIF($A$2:$A2,$A2)>1
筛选全部重复辅助列 =COUNTIF($A$2:$A$1000,A2)
一键去重数据 → 删除重复值(先备份)
组合判断删除重复时勾多列
统计唯一数=COUNTA(UNIQUE(A2:A100))
定期重复做Power Query

去重之前先问一句:重复的那几条里,有没有该保留的信息?很多时候问题不是"去重",而是"该留哪条"——这一步机器替不了你。