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