不确定其他人是否会遇到这个问题,所以我想发表我找到的答案。我喜欢@Ripster发布的数组解决方案(感谢那个,它几乎起作用了),但在这种情况下它实际上不起作用。我正在处理一张大量数据的表格,有1个ID列,我想检查其他表格,看看该表格中是否有重复项(使用ID列)。不过不是删除,只是标记,以便我可以查看它们。如果有可能超过50K行,则循环遍历每行需要很长时间。
所以,我想出来的方法是从其他表格中复制ID列到主表格中,并使用条件格式选项以某种颜色标记重复项。(它将在两个列中标记行),然后我可以按颜色过滤列,只显示我用于标记重复项的颜色。如果我在正在检查的表格中编程添加一列行号,甚至可以将该列包含在主表格中,这样当我按颜色过滤时,我可以看到它们在其表格中的行。
做完这些之后,我可以记录并调整宏,使其自动执行,以便我的编程能力较弱的同事也可以使用。
非常感谢大家!
编辑 - 添加代码
在选择要比较的列之后,以下是标记重复项为红色文本且无填充的代码:
Selection.FormatConditions.AddUniqueValues
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
Selection.FormatConditions(1).DupeUnique = xlDuplicate
With Selection.FormatConditions(1).Font
.Color = -16383844
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
然后,由于两列都有重复标记,您需要选择要检查的那一列,以下是筛选代码:
`Selection.AutoFilter
ActiveSheet.Range("$C$1:$C$12").AutoFilter Field:=1, Criteria1:=RGB(156, 0 _
, 6), Operator:=xlFilterFontColor`
在我的测试中,我使用列C作为筛选条件,可以通过cells()
引用或range(cells(), cells())
类型的引用进行编程。
祝愿每个人在未来的努力中都能取得最好的运气!再次感谢@ripster。
ActiveSheet.Range("$J$1:$J$59770").AutoFilter Field:=1, Criteria1:=strArray
,你上面的其余代码,但它只使用了该列中的最后一个值。 - user1759942ActiveSheet.UsedRange.AutoFilter Field:=1, Criteria1:=strArray, Operator:=xlFilterValues
- Ripster