我们经常遇到Eexcel数据重复的问题,需要解决,但能找到的教程都很零散,往往只提供了一种方法解决了某一类重复问题。
但是Excel数据重复问题,看似简单,但是深究起来,有很多值得思考和挖掘的细节。在这篇文章中,我试图梳理出所有我们会遇到的Excel数据重复问题,并给出多种解决办法。
要解决Excel重复数据问题,第一步是界定如何界定数据是否重复?或者说,我们依据什么来判断数据是否重复?
我能想到的有三种数据重复的情况:
而根据重复值可能出现的地方,又可以分为两种情况:
当我们找到重复数据(无论属于前面所列举的哪种情况)后,我们通常需要做如下处理:
下面一一梳理重复数据处理在Excel中的具体操作步骤。
如果属于【单字段重复】情况,只需要选择该字段,然后选择条件格式-突出显示单元格规则-重复值
这时会弹出下面的窗口:
左边下拉框可选择是标记重复值呢还是标记唯一值;右边下拉框则可选择要应用的格式,如果选择了自定义,则会弹出详细的格式设置框,可以进行更细致的格式(数字、字体、边框和填充效果)设置:
标记后效果如下(我用了默认填充效果标记重复值):
如果属于【多字段重复】或【全字段重复】,则标记之前需要有额外动作:新增一个辅助列,连接作为判断重复依据的列字段,然后在该辅助列上应用条件格式:
如上图所示,我需要通过【姓名】、【性别】和【姓名拼音】三个字段连接之后才能判定是否重复,因此我增加了一个辅助列【判断是否重复】,然后用公式连接那三个字段,再在辅助列上应用条件格式进行标记。可以看到两个陈婷虽然姓名和性别一样,但是邮箱不一样,最后结果是这两条记录作为两条不同的记录体现出来(无填充色)。
Excel条件格式无法删除唯一值并保留重复值,只能先标识出重复值,然后通过颜色筛选来保留重复值:
如果要提取重复值或唯一值,需要通过筛选后手动将重复值或唯一值提取到新的表格。
这里还是要区分是属于【单字段重复】/【多字段重复】/【全字段重复】中的哪一种。
如果属于【单字段重复】,只需要选定作为判断依据的列,然后点击【删除重复值】按钮,并在弹出窗口中选择【以当前选定区域排序】:
如果属于【多字段重复】/【全字段重复】,则可以选中任意一列后,点击【删除重复值】按钮,在弹出窗口中选择【扩展选定区域】:
这时Excel会弹出区域选择窗口,如果是【多字段重复】的情况,那么选择作为判定依据的列,然后确定;如果是【全字段重复】,则全选所有列之后点击确定。
直接用Excel的【删除重复值】命令,只能删除重复值,不能标记重复值(唯一值),也不能提取重复值,但是能保留唯一值。
05vlookup函数查找重复值
vlookup函数估计是Excel中使用率最高的函数之一。其基本形式是:
=VLOOKUP (lookup_value, table_array, col_index_num, [range_lookup])
参数说明见下表:
Vlookup函数的使用需注意以下关键点:
有时候我们会到要查找的值在需要查找区域的左侧,这时可以采取下面类似的办法:
=VLOOKUP(D2,IF({1,0},D2:D28,B2:B28),2,0))
公式中的1和0不是实际意义上的数字,而是1相关于TRUE,0相当于FALSE,当为1时,它会返回IF的第一个参数(D列),为0时返回第二个参数(B列)。根据数组运算返回数组,所以使用IF后的结果返回一个数组(非单元格区域):该数组由姓名列和姓名拼音列的值成对组成。
一、标记重复值或唯一值
vlookup查找结果即对重复值(匹配成功)或唯一值(匹配失败)进行了标记。
二、删除和提取重复值(唯一值)
对vlookup查找结果进行筛选后,即可删除重复值(唯一值),或将筛选结果复制到新的表格中。
如果查找重复值的操作只需要做一次,那么我建议用前面的几种方法就行了。
如果你日常工作中总是涉及查找重复数据并进行相应处理,那么,我建议用PowerBI来帮你节省海量时间。用我的口头禅就是——辛苦一次,幸福一生。
为什么这么说呢?因为不论你查找和处理重复值的步骤有多复杂,数据量有多大(几百万上千万乃至更大的数据应该轮不到我们用Excel来处理),只要建立好PowerBI数据模型后:你每次更新要做的要么只是打开模型文件刷新一下(PowerQuery),耗时几分钟;要么PowerBI以固定频率自动刷新结果(需要PowerBI账号且结果不会自动添加到Excel中),零耗时。
假设:
你是总公司的一名小员工,你的任务是每天接收下面单位发上来的报名表。
但是呢,下面单位的人做事不动脑筋,每天都给你发一个客户报名表上来。
这些表吧,有时候是包括该单位全部的报名信息,有时候又是只有新增的;而且有可能一个文件里边的多个sheets里边都有报名信息;这些Excel文件名称又是千奇百怪;最可气的是,让他们早上提交,他们有的非要快下班了才提交;唯一值得欣慰的是这些表格的字段都是一样的。
你现在需要从提交上来的N个表格中,剔除重复报名信息,形成一个完整的不重复的报名表。然后,你每天要在下班前把完整报名表给上级看。
很简单的一项工作,但是你用前面的方法做,我百分之一百肯定你每天都要加班——因为每天都有人17:55才把表发给你,而你18:00就要把报名表给上级看。
来看用PowerBI怎么把这个无聊工作缩短到5分钟乃至0分钟之内。
3.找到目标文件夹——“报名表”:
4.然后我们不要PowerQuery自作聪明地帮我们合并这些表啊sheets之类,我们自己操作,点击【转换数据】,:
5.这时就进入查询界面了:
6.我们删除不必要的列,只保留【Content】列,因为数据都在这里边。然后新增一列,调用Excel.Workbook()函数,从Binary中获取数据:
7.然后我们删除【Content】列,保留【自定义】列了,因为数据被我们提取到【自定义】列。点击该列右上角的展开图标,只保留其中的【Data】列(因为表格在这里面):
8.展开【Data】列之后,我们要做个小动作,就是把每一个表格的第一行都作为标题。这一步不是必须,可以将来再做,但是先做这一步可以节省一些步骤和时间,何乐而不为呢。调用Table.TransformColumns()函数和Table.PromoteHeaders()函数提升了表格标题后,就可以点击【Data】列旁边的展开符号,勾选全部三列,进行展开操作了:
9.展开后是下面这样子,这时我们已经汇总了下面单位提交上来的所有报名信息了:
10.接下来我们要去重。这里属于【全字段重复】,因此我们选中所有列(可以ctrl+a快捷键,也可以选中第一列,然后按住shift的同时点击最后一列),然后点击菜单栏的【删除行】下拉菜单里的【删除重复项】:
11.去重后我们发现还有null行,筛选剔除就行了。这样我们就得到了我们需要的下面所有单位的所有报名表了,且不再有重复:
12.最后一步,加载到Excel表格:
最后的结果:
13.高潮来了:假设在17:55,最后一家单位才把表格提交过来,比如叫《报名表3》,而你已经把其他单位的都处理好、得到一张报名表了,这时你要怎么办?一边哭爹叫娘一边重来一遍12个步骤么?NO!你要做的是,把这个《报名表3》丢到你之前建立好的《报名表》文件夹:
然后打开你刚才创建的《报名表汇总》Excel文件,点击【数据】标签,点击【全部刷新】按钮,三十秒后,奇迹发生了,你更新了接近2600条报名信息!看来那个最后交的家伙是故意坑你。但你只用了三十秒就处理完了,离18:00还有3分半!
那如果你连这三十秒的懒都想偷的话,那你需要等待下一篇文章。因为这篇文章实在太长了……