SO上的许多解决方案都涉及使用CountIf
查找重复项。但是,当我有超过100,000个值的列表时,CountIf
通常需要几分钟来搜索重复项。
有没有一种更快的方法可以在不使用CountIf的情况下在Excel列中搜索重复项?
谢谢!
编辑#1:
阅读评论和回复后,我意识到我需要更详细地说明。让我们假装我是一个观鸟者,从观鸟之旅中回来后,我将旅途中看到的1至25或50只新鸟类输入“我所看到的鸟类总列表”中。这实际上是一个动态增长的列表,每次添加之后,我都想确保不会复制列表中已经存在的内容。
因此,在文件的A列中是鸟的名称。 B-M列可能包含鸟的其他属性。我想知道最近一次观鸟之旅之后我刚刚在A列中添加的一只鸟是否在列表中的其他地方。而且,如果确实如此,我将手动合并这两个条目的数据,并丢弃一些,并在仔细检查后保留一些。我显然不想在数据库中重复输入同一只鸟。
因此,最终我希望得到一些指示,表明其他地方是否存在重复项,如果存在重复项,请告诉我要查找的行(或突出显示或为两个重复项上色)。
最佳答案
如果使用Excel 2007或更高版本(可能超过100,000个值),则可以选择:
主页标签|条件格式>高亮显示单元格规则>重复值...
右键单击突出显示的单元格,然后按选定的单元格颜色进行过滤,以仅显示重复项(但是请注意,使用条件格式设置可能会很慢)。
或者,运行此代码并对有色单元格进行过滤,这只需要花费100,000个单元格上的一秒钟:
Sub HighlightDupes()
Dim i As Long, dic As Variant, v As Variant
Application.ScreenUpdating = False
Set dic = CreateObject("Scripting.Dictionary")
i = 1
For Each v In Selection.Value2
If dic.exists(v) Then dic(v) = "" Else dic.Add v, i
i = i + 1
Next v
Selection.Font.Color = 255
For Each v In dic
If dic(v) <> "" Then Selection(dic(v)).Font.Color = 0
Next v
End Sub
附录:
要仅选择没有代码或公式的重复值,我发现此方法很有用:
数据标签|高级过滤器... 就地过滤器,仅唯一记录,确定。
现在选择唯一值的范围,然后按Alt +; (转到“特殊” ...仅可见单元格)。选中此选项,清除过滤器,您将看到所有未选中的单元格都是重复的,然后可以按Ctrl + 9(隐藏行)以仅显示重复的单元格。如果需要,可以将这些行复制到另一张纸上,或用“X”标记。