Excel 查找和删除重复项:5 种方法详解
条件格式、COUNTIF、删除重复值、UNIQUE、数据透视表五种查重方法,外加身份证号查重的坑、WPS 操作差异,以及删除时该保留哪一行。
阅读约 9 分钟 · 更新于 2026年9月24日
手头正好有你的订单或客户名单?直接向它提问 →
重复数据是最“安静”的错误。表面上一切正常,每一行看起来都是真实记录,但计数偏高、合计虚高,而且通常集中在某个时间段,比如某次导出被执行了两次。任何数字在拿去汇报之前,都应该先查一遍重复。
本文按“从最快看到到最可控”的顺序介绍 5 种查重方法,每种都给出 Excel 中文版菜单路径和公式,再补充英文教程里通常不讲的内容:身份证号、长订单号查重的坑、全角半角导致的“假不重复”、WPS 表格的操作差异,以及删除时到底该保留哪一行。
先搞清楚:什么算重复?
这一步比用什么方法更重要。两行数据可能是:
- 完全重复:每个单元格都一样。几乎都是导出或复制粘贴出的错,可以放心删除。
- 关键字段重复:订单号、客户编号或手机号相同,但其他列不同。可能一行是另一行的更新版本,也可能是两笔真实交易共用了一个编号。不能盲目删除。
- 模糊重复:「深圳市腾达贸易有限公司」和「深圳腾达贸易有限公司 」,人一看就知道是同一家,Excel 却认为是两个不同的字符串。
先确定你要找的是哪一种,再选方法。
方法一:条件格式,一眼看出重复
选中能唯一标识一条记录的列(订单号、手机号),点 开始 → 条件格式 → 突出显示单元格规则 → 重复值,所有出现不止一次的值都会被标红。
优点是快、直观、不改动数据。局限也很明显:一次只能看一列;文本「10」和数字 10 被当成不同的值;它不告诉你重复了几次;数据量很大时会让表格变卡。适合回答“我到底有没有重复问题”。
订单号有重复吗?多出了多少行?
共有 214 个订单号出现不止一次,多出 231 行,让总销售额虚高了 ¥126,480。
其中 198 行集中在 3 月 11 日那一周,很像同一份导出被追加了两次。在 Excel 里用 =COUNTIF($A$2:A2,A2)>1 可以标出每个订单号第一次之后的所有重复行。
方法二:COUNTIF,数清楚重复了几次
在关键字段旁边加一列辅助列:
=COUNTIF(A:A,A2)
每一行都会显示它的编号一共出现了几次。筛选大于 1 的值,看到的就是全部重复行及其完整信息。
两个进阶用法:
- 区分第一次和后续重复:
=COUNTIF($A$2:A2,A2)只统计当前行及以上的范围,所以第一次出现显示 1,之后显示 2、3……筛选大于 1,看到的正好是“要删掉的那些行”。 - 按多列组合判断重复(同一客户、同一天):
=COUNTIFS(A:A,A2,E:E,E2)。
需要判断重复而不只是删除时,这是最好用的方法。
方法三:删除重复值,一步去重
选中数据区域,点 数据 → 删除重复值,弹出的对话框会列出每一列,旁边有复选框:
- 勾选全部列:只删除完全重复的行,最安全。
- 只勾选订单号:每个订单号保留第一行,其余全部删除。Excel 按当前排列顺序保留最上面的那一行,不会询问你。所以如果你在意保留哪一行,先排序,比如按更新时间降序,让最新记录排在最前。
操作完成后 Excel 会提示删除了多少个重复值、保留了多少个唯一值。这个操作保存后不可撤销,务必先在副本上做。
方法四:UNIQUE,只列出不删除
Excel 365 和 Excel 2021 支持动态数组函数:
=UNIQUE(A2:A1000)
会把不重复的编号“溢出”到一列。=UNIQUE(A2:A1000,,TRUE) 只返回恰好出现一次的编号,剩下的就是重复集合。想知道多出了多少行:
=COUNTA(A2:A1000)-COUNTA(UNIQUE(A2:A1000))
结果就是多余的重复行数。较新版本的 WPS 表格也支持 UNIQUE 函数;老版本 Excel 没有这个函数,用方法二代替。
方法五:数据透视表,按编号计数
插入 → 数据透视表,把关键字段同时拖到「行」和「值」(值字段设置为「计数」),再按计数降序排序。大于 1 的就是重复编号,重复几次一目了然。数据量大、辅助列公式计算很慢时尤其合适,也方便向别人汇报“我们发现了 214 个重复订单号”。透视表的具体操作见 Excel 数据透视表教程。
用 FILTER 一次列出所有重复行
如果你用的是 Excel 365 或 Excel 2021,可以不加辅助列,直接用一个公式把所有重复行“拉”到旁边的空白区域:
=FILTER(A2:F1000,COUNTIF(A2:A1000,A2:A1000)>1)
结果会包含每个重复订单号的全部行(包括第一次出现的那一行),方便你逐条对比金额、时间和状态,判断哪一行才是应该保留的。想按订单号排好序查看,可以在外面套一层 SORT:=SORT(FILTER(A2:F1000,COUNTIF(A2:A1000,A2:A1000)>1),1)。
这个方法的好处是完全不改动原数据,源表一更新,结果自动刷新。适合在删除之前做一次人工复核,或者把重复清单发给同事确认。
按业务规则判断重复
很多时候,“重复”的定义来自业务规则,而不是某一列完全相同。几个常见例子:
- 同一手机号同一天下了多单: 可能是用户重复提交,也可能是正常复购。用
=COUNTIFS(C:C,C2,D:D,D2)(C 为手机号,D 为下单日期)找出来,再结合金额判断。 - 同一员工同一天多条打卡记录: 考勤表里很常见,一般保留最早和最晚两条,而不是简单去重。
- 同一发票号出现两次: 在财务报销中往往意味着重复报销,应该标记出来人工审核,而不是直接删掉其中一条。
这类情况的共同点是:先标记、再判断、最后处理。用 COUNTIFS 辅助列或条件格式标出来,交给熟悉业务的人确认。
身份证号和长编号查重的坑
这是中文用户最常踩的坑。COUNTIF 在比较时会把看起来像数字的文本当成数字,而 Excel 数字只有 15 位精度。两个 18 位身份证号只要前 15 位相同,COUNTIF 就会认为它们相等,结果出现大量“假重复”。
解决办法是在条件后面拼接一个通配符,强制按文本比较:
=COUNTIF(A:A,A2&"*")
同样的问题也会出现在 16 位以上的订单号、银行卡号上。另外,这类列在导入时就要设置为文本格式,否则后几位会直接变成 0,查重也就无从谈起。
模糊重复:先统一再查
上面五种方法都识别不了「腾达贸易 」和「腾达贸易」这种差异。先在辅助列里统一格式:
=LOWER(TRIM(SUBSTITUTE(SUBSTITUTE(B2," ","")," ","")))
这个公式去掉了半角和全角空格,并把英文统一成小写;全角字母数字可以再套一层 ASC 转成半角。之后再对辅助列用任意一种方法查重。
像「有限公司」和「公司」、「北京市」和「北京」这类写法差异,公式很难穷尽,可以用 Power Query 的模糊匹配合并,或者建立一张标准名称对照表,用 XLOOKUP 统一替换,具体写法见 XLOOKUP 与 VLOOKUP 对比。
跨两个表查重
想知道表 1 的客户有没有出现在表 2 里,在表 1 加辅助列:
=COUNTIF(Sheet2!A:A,A2)
大于 0 表示两个表都有。也可以用 =XLOOKUP(A2,Sheet2!A:A,Sheet2!A:A,"不存在"),找不到时显示“不存在”,更直观。
WPS 表格的重复项功能
WPS 表格把查重功能集中在 数据 → 重复项 菜单下:
- 设置高亮重复项:相当于 Excel 的条件格式标记重复值。
- 删除重复项:与 Excel 的删除重复值逻辑相同,同样保留第一次出现的行。
- 拒绝录入重复项:给某列设置后,再输入已有的值会弹出提示,适合手工录入的名单,从源头防止重复。
COUNTIF、COUNTIFS 等公式在 WPS 中写法完全一致,身份证号的 15 位精度问题同样存在,同样用 &"*" 解决。
该保留哪一行?
| 情况 | 保留哪一行 |
|---|---|
| 完全重复 | 任意一行,删除其余 |
| 同一编号,更新时间不同 | 最新的一行:先按时间降序排序,再按编号删除重复值 |
| 同一编号,金额不同,没有时间戳 | 先别删,回源系统核实,可能是两笔真实交易 |
| 同一手机号或邮箱,只是空格、大小写不同 | 先统一格式,再保留一行 |
一条原则:按关键字段去重之前一定先排序,让保留下来的那一行是你有意选择的结果。
常见错误
- 没备份就删除重复值。 保存后无法恢复,先另存副本。
- 只勾选一列就删。 按关键字段去重会删掉其他列不同的行,确认这些行确实是多余的再操作。
- 忽略了身份证号的精度问题。 COUNTIF 直接比较 18 位号码会产生假重复,记得加
&"*"。 - 条件格式显示“没有重复”就放心了。 可能是空格、全半角或文本数字差异让重复值“隐身”了。
- 去重后没核对合计。 对比去重前后的行数和金额,确认差额与重复行数量吻合。
从源头减少重复
查重和去重是事后补救,更省事的是让重复少发生:
- 固定导出流程。 很多重复来自“导出两次、手动拼接”,约定每次导出的时间范围不重叠,比如按自然周或自然月导出。
- 手工录入的表设置防重。 Excel 可以用 数据 → 数据验证 → 自定义,公式填
=COUNTIF(A:A,A1)=1,输入重复值时会被拒绝;WPS 可直接用「拒绝录入重复项」。 - 合并多个文件前先各自去重。 多份导出合在一起之前,先确认每份内部没有重复,再检查文件之间的重叠部分。
直接问,不用手动找
如果这份表是你准备分析的导出文件,查重应该是第一个问题。把文件上传到 ChatExcel,问“订单号有重复吗?多出了多少行?”,它会基于全部数据统计重复数量并列出受影响的行;接着问“去掉重复订单号后,总销售额是多少?”,不改原文件就能得到修正后的数字。
需要一份干净的文件时,可以让它生成去重后的 Excel 直接下载;想在自己的表里操作,问“在 Excel 里怎么删掉这些重复项?”,它会针对你的列名给出操作步骤和公式。ChatExcel 仅提供付费方案(Plus $29/月起),没有免费试用,详情见 价格页面。清洗数据的完整清单,见 Excel 数据清洗:分析前必做的检查。
- 删除重复值保留的是第一行还是最后一行?
- 保留当前排列顺序下的第一行。如果你想保留最新的记录,先按更新时间降序排序,让最新的行排在最前,再按关键字段执行「数据 → 删除重复值」。
- 为什么身份证号用 COUNTIF 查重结果不对?
- COUNTIF 会把像数字的文本当数字比较,而 Excel 数字只有 15 位精度,前 15 位相同的身份证号会被误判为重复。把公式改成 =COUNTIF(A:A,A2&"*") 即可强制按文本比较。
- 看起来一样的值,为什么条件格式不标记为重复?
- 通常是存在看不见的差异:首尾空格、全角空格、一个是文本一个是数字,或英文大小写不同。先用 TRIM、SUBSTITUTE 或 LOWER 在辅助列统一格式,再对辅助列查重。
- WPS 表格怎么删除重复项?
- 在 WPS 中点「数据 → 重复项 → 删除重复项」,选择判断重复的列后确认即可,逻辑与 Excel 相同。同一菜单还有「设置高亮重复项」和「拒绝录入重复项」两个实用功能。
- 怎么统计一列里有多少个重复值?
- Excel 365 或 2021 中用 =COUNTA(A2:A1000)-COUNTA(UNIQUE(A2:A1000)),结果就是多余的重复行数。老版本可以用 COUNTIF 辅助列,再统计结果大于 1 的行数。