在工作中使用Excel时,经常会有需要在对原始记录清单进行整理时,剔除其中一些重复项。接下来本文就来讲解下Excel中去除重复项的几种常用技巧。
所谓的重复项,通常是指在Excel中某些记录在各个字段中都有相同的内容(纵向称为字段,横向称为记录),例如下面图中的第三行数据记录和第五行数据记录就是完全相同的两条记录,除此以外还有第六行和第十行也是一组相同记录。
在另外一些场景下,用户也许会希望找出并剔除某几个字段相同的但并不完全重复的“重复项”,例如下面图中的第7行记录和第12行记录中的【姓名】字段内容相同,但其他字段的内容则不完全相同。
以上这两种重复项的类型有所不同,在剔除操作的实现上也略有区别,但本质上并无太大差别,可以互相借鉴参考。下面将以这两种场景为例,介绍几种常用的删除重复项操作技巧。
1、删除重复项
【删除重复项】功能是Excel 2007版本以后新增的功能,因此适用于Excel 2007及其后续版本。
将活动单元格定位在数据清单中,然后在功能区上依次单击【数据】——【删除重复项】,会出现【删除重复项】对话框。
对话框中会要求用户选择重复数据所在的列(字段)。假定我们将“重复项”定义为所有字段的内容都完全相同的记录,那么在这里就要把所有列都勾选上。而如果只是把某列相同的记录定义为重复项,例如文章开头所提到的第二种场景情况,那么只需要勾选那一列字段即可。
在勾选所有列以后,单击【确定】按钮,就会自动得到删除重复项之后的数据清单,剔除的空白行会自动由下方的数据行填补,但不会影响数据表以外的其他区域。效果如下图所示:
2、高级筛选
在2007版出现以前,【高级筛选】功能一直是删除重复项的利器。
将活动单元格定位在数据清单中,然后在功能区上依次单击【数据】——【高级】(2003版本中的操作路径是【数据】——【筛选】——【高级筛选】),会出现【高级筛选】对话框。
对话框中会要求用户指定列表区域,就是数据清单所在的单元格区域,默认情况下会自动生成。筛选方式上一般选择“将筛选结果复制到其他位置”,以方便删除重复项以后的处理操作。指定这种方式以后,对话框中会要求用户指定“复制到”哪里,也就是删除重复项以后的数据清单放置位置,用户指定其左上角单元格的位置即可,在这个例子中我们设定为E1单元格。最后一项也是删除重复项最关键的一个选项必须勾选:【选择不重复的记录】。如下图所示:
单击【确定】按钮以后,就会在E1单元格开始的区域中生成剔除重复项以后的另一份数据清单,效果如下图所示:
假定按照第二种场景的方式来定义重复项,就是需要删除所有【姓名】字段内容重复的记录,可以这样操作:
在数据清单中,选中【姓名】字段所在的区域A1:A12单元格,然后在功能区上依次单击【数据】——【高级】(2003版本中的操作路径是【数据】——【筛选】——【高级筛选】),会出现【高级筛选】对话框。筛选方式选择“在原有区域显示筛选结果”,【选择不重复的记录】复选框同样必须勾选,如下图所示:
选择【在原有区域显示筛选结果】的方式,使得对A列不重复项的筛选结果能够同时影响到其他字段上。单击【确定】按钮后,筛选结果如下图所示。将这个筛选的结果复制粘贴出来,就等到一份剔除姓名字段重复项以后的新清单。需要补充的一点是,对于姓名字段相同的记录,这样的剔除操作过后,保留的是最先出现的记录。例如在第七行和第十二行两个“吴凡”之间,Excel保留的是最先出现的第七行记录,而剔除了后面的第十二行记录。
3、使用公式
如果会一点函数公式,那么用函数公式配合筛选的方式来操作会更灵活多变一些,可以适应更多复杂条件。
在D列增加一个辅助公式,在D2单元格中输入公式:=A2&B2&C2,然后向下复制填充,生成的一列公式结果是将各条记录中的三个字段内容合并在一个单元格中。然后在E列再增加一个辅助公式,在E2单元格中输入公式:=COUNTIF(D2:D$12,D2),特别注意公式中绝对引用符号$的使用位置。将公式向下复制填充,得到下面图中所示的结果:
COUNTIF函数的作用是统计某个区间内,与查询值相同的数据的个数,上面那个公式中的D2:D$12这种绝对引用和相对引用相组合的方式就可以在公式向下复制的过程中形成一个随位置变化的动态区域,使得COUNTIF函数每次都只跟自己下方的区域中的数据进行对比,而不会牵涉到上方的数据。因此在第三行的时候,会找到2条与“李明28研发部”相同的记录,而到了第五行的时候,就只找到了一条匹配记录。
通过这个公式结果可以发现,所有E列运算结果大于等于2的记录(如果有更多的重复,结果会大于2)就是我们需要剔除的重复项。这个时候,使用自动筛选功能,在E列筛选出大于1所在的行,然后删除整行,再恢复到非筛选状态,就能得到最后所需的清单,如下图所示:
在上面的操作中之所以要将三个字段内容合并在一起,是因为我们在第一个场景中将“重复项”定义为所有字段内容都相同,因此将这三个字段的内容同时合并在一起进行比较,相当于逻辑运算中的”与“运算。假设需要按照第二场景中的定义来进行剔除操作,就不再需要D列这个过渡公式,而是可以直接以A列作为COUNTIF函数的对比区域,可以使用公式:=COUNTIF(A2:A$12,A2) 就可以实现相同的效果。需要补充说明的是,这个方法在剔除操作后,所保留下来的记录是重复记录中最晚出现的那条记录。
同样是第一场景,也可以用一个稍微复杂一些的公式来替代D、E两列的公式:=SUMPRODUCT(1*(A2&B2&C2=A2:A$12&B2:B$12&C2:C$12)) 公式的原理与前面相同。