ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Excel重复项处理全攻略:从筛选删除到COUNTIF公式与跨表查重

Excel重复项处理全攻略:从筛选删除到COUNTIF公式与跨表查重 我一开始用Excel处理重复数据的时候也以为“筛选重复项”就是把数据选中、点一下按钮的事。但实际做下来才发现这个过程里藏着一堆容易混淆的东西你是想“只看重复的”还是“把重复的删掉只剩一条”你是想“按整行判断”还是“按某一列判断”如果没把这些想清楚轻则筛出来的结果不对重则把原本不想删的数据也误删了惹出不小的麻烦。这篇我按自己平时处理表格的真实顺序来写结合“筛选、查找、删除、公式”四个核心需求把Excel里的重复项处理从头到尾拆一遍。不管你是刚接触Excel的新手还是已经会用SUMIFS但没怎么碰过查重功能的老手这篇文章都能给你提供一个可以直接照做的完整方案。1. 先搞清楚“重复项”到底是个什么问题很多人一上来就急着找按钮我先泼一盆冷水Excel里没有一颗叫“筛选出所有重复项”的神奇按钮。因为“重复”这个说法本身就有好几个含义不同含义对应的做法完全不一样。1.1 你想要的“重复项”是哪一种我给你总结了四种最常见的需求你可以拿自己手头的表格对号入座只看重复行一个订单表里同一订单号出现了好几行你想把那些出现不止一次的行全部挑出来审视一下先不删除。删除重复行只保留一条手里有2000行客户数据很多客户重复录入了想精简到只有一份。比较两列或两个表Sheet1的A列和Sheet2的A列各有一批数据你想知道哪些在两边都出现了或者哪些只在一边出现。非精确重复看起来一样、其实藏着空格或格式差异的假重复这种最容易翻车后面我会专门讲。1.2 先弄明白“判断依据”是谁这是所有重复项操作里最核心的一步。Excel判断重复从来不是凭眼睛看整行“像不像”而是依据你选中的列来判断。举一个实际工作里的例子一张员工名单里面有“工号、姓名、部门、入职日期”。如果你只选中“姓名”这一列做重复项筛选那“张伟”这种重名的人会被全部标记成重复但如果你同时选中“工号姓名部门”三列判断的就是这三列组合在一起的完整记录是否重复。组合判断看起来更严谨但代价是只要有任何一个单元格有细微差异比如一个部门写了“技术部”另一个写了“技术部 ”——多一个空格它就会认为是两条不同记录。所以在动手之前先想清楚我这句话你准备用哪一列作为唯一标识。实践里唯一的ID号、流水号、合同号是首选其次才是姓名、品名这类有重名风险的字段。2. 条件格式高亮筛选重复项最快的可视方案如果你的需求是“先看看重复情况不想马上删除”那条件格式是所有方案里最直观的。2.1 两分钟标记出所有重复项具体是这样的流程选中你要检查的那一列数据区域注意不要选列标题。比如你的姓名在A2到A2001就选中这个范围。点击“开始”选项卡里的“条件格式”按钮在弹出来的菜单里选择“突出显示单元格规则”继续选“重复值”。在弹窗左侧保持“重复”不变右侧可以选一个颜色比如黄底红字。点击确定所有重复出现的单元格立刻上色。只用三步就能让重复项全部“浮出水面”。这个功能对单列检查非常高效数据量哪怕到几万行运行速度也在接受范围内。不过它有一个限制它是对你选中的那个单元格范围逐一判断的。如果你选的是A2:A2001那它只在这2000个单元格里找相同值并不关心这些值在其他列或者其他工作表里是否重复。2.2 在高亮之后怎么把重复项单独“筛选”出来很多人做到上一步就停了接着问“怎么筛出来”。其实很简单高亮颜色本身就可以作为筛选条件。鼠标点进有颜色的数据区域的任何一个单元格。按快捷键CtrlShiftL或者点“数据”选项卡里的“筛选”按钮给这一列加上筛选下拉箭头。点开下拉箭头鼠标移到“按颜色筛选”不同版本显示为“按字体颜色筛选”或“按单元格颜色筛选”在子菜单里点你刚才设置的那个颜色。这样表格里就只留下高亮过的重复项其他数据被临时隐藏。注意这只是筛选视图并没有删除任何东西。你可以在此基础上做检查、留档也可以等确认无误后再执行删除操作。2.3 条件格式的几个实际注意事项大小写问题Excel默认认为“ABC”和“abc”是同一个字符串会在条件格式里被当成重复值。如果你想区分大小写条件格式帮不了你得用后面的公式方案。为什么只高亮了部分单元格比如A1写“产品A”A2写“产品 A”中间多个空格条件格式默认会认为它们不是重复项。这种“看着像实际上不同”的情况我会在讲公式时专门处理。选择区域比你想象得大如果你选中一整列比如AA而不是具体的数据范围Excel也能工作但计算量会变大。表格行数不多时无所谓数据量上万以后会有明显卡顿所以选范围时尽量精确。3. 高级筛选里的“选择不重复的记录”被低估的去重神器很多人用“高级筛选”只是因为它能做多条件查询却没注意到对话框右下角那个“选择不重复的记录”复选框。这个功能处理“删除重复项、保留一条”的场景非常趁手尤其是需要一边筛选一边去重的组合需求。3.1 为什么普通筛选做不到这件事普通筛选只是一个“显示/隐藏”工具它能把重复的行都显示出来但没法告诉你“第一批重复项里到底哪几条保留、哪几条去掉”。高级筛选则是在筛选的底层逻辑里加入了“唯一性判定”所以它在筛选结果的同时就已经帮你把重复记录压缩成了一条。3.2 操作步骤用高级筛选提取唯一记录在任意空白区域做一个筛选条件区域。我习惯在表格右侧留出两列一列写字段名一列写条件。比如我要筛选部门为“销售部”的记录并且只要不重复的那就写G1单元格输入“部门”G2单元格输入“销售部”。鼠标点数据区域中的任意单元格然后点击“数据”选项卡里的“高级”按钮弹出“高级筛选”对话框。“列表区域”通常是自动帮你选好的检查一下范围是否正确“条件区域”选择刚才写的G1:G2。关键一步在对话框左下角勾选“选择不重复的记录”。如果你不想动原始数据选择“将筛选结果复制到其他位置”然后在“复制到”里指定一个空白单元格比如I1。点确定之后新位置就会得到一份“部门销售部且没有重复记录”的清单。3.3 高级筛选去重的三个关键边界跨列去重要同时选中多列一起作为列表区域。比如你想按“部门姓名”组合去重列表区域就要同时框选两列。如果只选了姓名列那部门不同的同名员工会被当成重复项删掉。别把列标题选漏了。如果列表区域里没把标题行选进去Excel会把第一行数据当成字段名导致第一行记录直接消失很多人踩过这个坑。高级筛选对公式结果进行去重时判断的是“公式算出来显示的值”而不是公式本身。这点和后面讲的删除重复值一致但能帮你避免“我明明用的公式不同怎么还被去重了”的困惑。4. 删除重复值最快但风险也最大的去重按钮如果你明确知道自己要的就是“重复的删掉只留一条”而且不需要额外筛选条件那“数据”选项卡里的“删除重复值”按钮是效率最高的选项。一万行数据去重它通常几秒内就能跑完。4.1 完整操作流程建议先把原始工作表复制一个副本右键点击工作表标签选择“移动或复制”勾选“建立副本”。这一步是给自己的后悔药。鼠标点进数据区域的任意单元格点击“数据”选项卡里的“删除重复值”按钮。弹窗里会列出这一块数据的所有列名并且默认全部勾选。你需要决定按哪几列判断重复。点击确定Excel会弹出一句提示发现了多少个重复值已将其删除保留了多少个唯一值。注意这一步是不可逆的除非你在第1步做了副本。没有副本的情况下只能立刻按CtrlZ撤销但如果撤销之后你又做了其他操作就救不回来了。4.2 它的判断机制你可能理解错了我在培训时发现一个高频误解有人以为“删除重复值”是按整行内容一模一样才删除。实际上它是按照弹窗里被勾选的列来判定重复的。Excel会把这些列的部分字段连成一个判定链组合值相同就视为重复默认保留第一次出现的记录后面出现的相同记录全部删除。举个例子你想按“订单号”去重但弹窗默认把所有列都勾上了。这时候只要有两行的“客户名”或“金额”有一丁点不同Excel就认为它们不是重复行去重效果直接失效。所以正确做法是只勾选你想要作为唯一标识的那一列或几列。算法上没有所谓的“合并同类项”它只是做一次判定、按位置保留。4.3 去重之前必须做的三项检查我给自己定了一个规矩用这个按钮前必须过三关第一关备份。无论多小的表格我都先复制一个备份 sheet防止数据被系统自动扩展区域时误伤。第二关确认表头。如果这一列没有标题Excel有时候会把第一行数据误当成字段名导致第一行被保留但后续去重逻辑依然正常工作不过逻辑上是错的。去重前我通常会补一个标题或者索性在弹窗里检查“数据包含标题”是否勾选正确。第三关确认勾选列。这个弹幕出来后别急着点“确定”认真看一遍哪些列打了勾只保留判断重复所必需的列。5. 查找重复项公式COUNTIF家族的正确打开方式到了这一步才算真正进入“查找重复项公式”的高阶操作。条件格式、高级筛选、删除重复值都是“点按钮”就能完成但是遇到带有复杂条件的查重需求按钮就不够用了。这时候公式的价值就体现出来了。5.1 最基础的公式统计它出现了几次对于A列的每一个值我想知道它到底出现了几次习惯用 COUNTIF 函数COUNTIF(A:A, A2)第一个参数A:A是统计范围。第二个参数A2是对比条件也就是当前行这个单元格的值。它做的事情很直白在整个A列里数一数与A2单元格相同的值有几个。如果返回结果是3就说明这个值出现了3次。放生活里解释这个函数就像老师点名每念到一个学生的名字就在名册上给那个名字画上一道最后看看每个名字被画了几道。5.2 标记“是否重复”的公式把 COUNTIF 放到 IF 函数里可以标记每一条记录是否重复IF(COUNTIF(A:A, A2) 1, 重复, 唯一)这个公式表示如果A2在整列中出现的次数大于1就显示“重复”否则显示“唯一”。如果要简单到只显示“是/否”也可以这样写IF(COUNTIF(A:A, A2) 1, 是, )配合筛选功能把“是”筛出来就能看到所有重复项。5.3 多条件重复判定COUNTIFS实际业务里两个字段“看着相同”不代表记录真的相同。比如一个订单表订单号可能重复但同一订单号下有不同的产品编码那它们其实是明细行不是错误重复。这时候就要用多条件判断。假设你要判断“B列的产品编码 和 C列的所在城市”组合是否重复IF(COUNTIFS(B:B, B2, C:C, C2) 1, 重复, 唯一)这个公式就是在告诉你在B列找到所有等于B2的行再在C列找到所有等于C2的行如果同时满足两个条件的行数大于1就判定为重复。这在处理业务明细表时非常实用。5.4 使用查找公式时的几个高频错误忘记绝对引用。很多人写COUNTIF(A1:A100, A1)向下拖拽公式时范围跟着往下跑了变成COUNTIF(A2:A101, A2)结果统计区域错位判断全乱。正确写法是把统计范围锁定成$A$1:$A$100。整列引用造成卡顿。COUNTIF(A:A, A2)在几百行的表格里没问题但到了几万行整列计算会让表格明显变慢。数据量大的时候改成精确范围$A$2:$A$10000会快很多。空格导致的假重复。如果A2单元格内容后面多了一个空格而A5单元格没有空格COUNTIF会认为这是两个完全不同的值。遇到这种情况建议用TRIM函数包裹一下判断单元格和范围比如IF(COUNTIF($A$2:$A$100, TRIM(A2)) 1, 重复, 唯一)数字格式错位。 看起来都是100但一个是文本型的“100”一个是数字型的100COUNTIF会认为它们是不同的。如果出现“明明有两个100公式却只统计到1个”的情况检查一下那两个单元格左上角有没有绿色小三角。如果有说明存在文本型数字用“转换为数字”功能统一格式。5.5 进阶提取一份“不重复名单”Excel 2021和Office 365里有UNIQUE函数可以一键提取不重复清单UNIQUE(A2:A100)老版本没有这个函数我会用“高级筛选”配合“选择不重复的记录”来搞定。或者用数组公式的老套路但复杂度较高新手我不太推荐一上来就碰。所以如果版本支持UNIQUE优先版本不支持就回到高级筛选效率也很高。6. 跨表查重Sheet1 A列和Sheet2 A列的对比关于最新网络热搜词里那个“sheet1 a列和sheet 2 a列不重复的项”我单独拿出来讲因为这是实际工作中最常见的跨表查重需求。场景比如这个月发出去的会员名单在Sheet1之前已经发过的旧名单在Sheet2我想找出哪些会员是这个月新加的。6.1 问题拆解你需要的其实是集合运算求Sheet2 A列中的名单没有在Sheet1 A列里出现的部分也就是差集。Excel没有跟SQL里MINUS完全等价的按钮但用公式可以优雅地实现。6.2 用公式在Sheet2中标记出“上次名单里没有的”假设Sheet1的名单在A2:A1000Sheet2的名单也在A2:A1000或者更长在Sheet2的B2单元格写IF(COUNTIF(Sheet1!$A$2:$A$1000, A2) 0, 新增, 已存在)往下拖动公式。凡是显示“新增”的就是在本次名单里有、而上次名单里没有的记录。筛选“新增”就得到了你要的“不重复的项”。6.3 跨表对比时的注意事项引用别的表时范围一定要写工作表名加上感叹号写作Sheet1!$A$2:$A$1000不要漏掉那个感叹号。如果两个表数据量特别大COUNTIF逐行扫描会很慢。这时候我一般建一个辅助列先在原表里用COUNTIF跑一遍再用“值粘贴”把结果转成静态文本再筛选能有效降低卡顿感。反过来求交集——两边都存在的项——就把公式里的0改为0同样的套路。面对两列数据在不同sheet但结构相同还可以用VLOOKUP辅助判断如果VLOOKUP(A2, Sheet1!$A:$A, 1, FALSE)返回#N/A就说明找不到也就是“新出现的”。7. 其他高频疑难假重复、ID长度、数组去重思路这个标题下的网络热词里还有很多常见的Excel查重周边问题我挑几个出现频率最高的聊聊。7.1 “看着一样但实际不一样”的假重复很多人做过一件事用条件格式高亮重复项结果发现两个一样的名字没被标出来或者明明只有一个的名字反而被标了。这基本都是“假重复”问题。常见原因有不可见空格中文全角空格、英文半角空格、换行符肉眼看不出来但Excel判定为不同字符。文本与数值混存同一个数字有些是文本格式有些是常规格式。日期格式不同2024/1/1 和 2024-01-01 在单元格里显示一样但底层存储的字符串不同。科学计数法超长数字在单元格里显示为1.23457E17导致看起来一样的ID实际不同。面对这些问题我一般按这个顺序排查先用TRIM清理空格再统一数字格式最后用“分列”功能把文本型数字转成数值。7.2 18位身份证号为什么一到查重就乱这是身份证、订单号这种超过15位的长数字经常出的问题。Excel的精度只有15位有效数字超过15位后后面的位数会被自动变成0。所以如果身份证号是直接输入的数值格式Excel根本记住的是被截断后的数字两个身份证号可能后6位不同在Excel眼里却被当成同一个数。而且用COUNTIF去重时由于精度限制几万个ID里很容易判断失误。解决方法很简单先选中那一列在“开始”选项卡里把格式改成“文本”再重新输入身份证号或者用分列功能把现有的数值强制转成文本。判断重复时文本格式下COUNTIF就能准确区分每个字符的差异了。7.3 把SQL/编程里的去重思路迁移到Excel热搜词里有“python筛选一样的”、“数组去重”、“js快慢指针有序数组原地去重”。这些编程概念和Excel去重虽然语言不同但本质是同一个问题在一组数据中找交集、找差集、找唯一值。对不熟悉编程的读者我做一个通俗的类比Excel里的删除重复值相当于 Python 里的drop_duplicates()解决的是“保留唯一记录”。Excel里的COUNTIF相当于 Python 里的value_counts()解决的是“统计出现次数”。Excel里的VLOOKUP交叉匹配相当于 SQL 里的LEFT JOIN解决的是“从另一张表带出匹配值”。想清楚你要的到底是哪一种“集合操作”再去选Excel里的对应工具思路就通了。7.4 数组去重能不能直接在Excel里做老版本Excel没有UNIQUE函数时确实有人用数组公式去重比如INDEXMATCHCOUNTIF的三键数组公式。我实话说能实现但维护成本高新手特别容易在花括号和三键输入上失败而且数据量一多很卡。所以我的建议是能用新函数UNIQUE用新函数不能用就用高级筛选的“选择不重复的记录”都不行再用辅助列COUNTIF。工具永远是越简单越稳。8. 我整理的一套完整的查重流程与个人心得写到最后把上面这些零散的技巧串成一条实际的作业流程。8.1 按这个流程走一般不会错先问清楚需求你是“查看重复”还是“删除重复”这个问题决定了你是用高亮、高级筛选还是删除重复值。备份一份无论是删重复项还是做跨表比对第一步永远是复制sheet或者复制一个工作簿副本。这个习惯能救你无数次。清理数据格式用TRIM清理空格、用分列统一格式、把头尾不可见字符处理掉再做去重判断。如果数据是从其他系统导出的这一步几乎一定会用到。确定判断依据列选哪一列作为“唯一标识”是去重成功的关键。订单表用订单号会员表用ID不建议直接用姓名。选择工具只想看条件格式高亮 按颜色筛选。想快速清理删除重复值勾选正确的列。需要筛选去重组合高级筛选 选择不重复的记录。需要跨表比对或复杂条件COUNTIF/COUNTIFS公式。版本支持且需要提取清单UNIQUE函数。验证结果去重完成后用COUNTIF抽查几个值看统计次数是否为1跨表比对时人工抽几条新增记录确认筛选逻辑没问题。8.2 踩过几次坑之后我的一些个人体会我见过一个真实的惨痛案例同事拿到一份3万行的客户表直接用删除重复值按钮处理结果把同名的不同客户全合并成一条了因为他没有意识到默认勾选全部列时系统是按“整行完全重复”来判定的。而他以为系统“聪明地”知道哪些客户是同一人。教训很深刻。所以我特别想强调在处理重复项前先回答“哪一列或哪几列组合能唯一代表一条记录”。想清楚这一件事你已经比90%的人强。另外在公式方案里我最常用的其实不是复杂的数组公式或UNIQUE而是最简单的COUNTIF加筛选。它快、透明、自己可控不容易出错。做数据分析时我会把COUNTIF的结果放到数据透视表的“值”区域里做统计在日常报表里我用它做颜色标记和辅助列。几乎所有查重需求都可以用它先跑一遍再决定要不要删除。Excel的重复项处理归根结底就是在回答三个问题什么是重复你需要保留哪一条以及你愿意花多少时间在验证上。把这些想明白了用什么工具都顺手。希望这篇按我的实际操作经验写的长文能帮你在下次面对脏数据时不再头疼。
返回列表