如何自动检查同一工作簿中多个工作表中的多个列表中的重复项?
我已经设法通过为我需要的每个比较使用宏来半自动工作。这意味着用于在以下各项之间查找重复值的宏
Worksheets("All").Range("Annie") and Worksheets("Annie").Range("A:A")
Worksheets("All").Range("Benny") and Worksheets("Benny").Range("A:A")
等等等等。
Here is a screenshot that shows where I'm at, and hopefully visualizes what I am trying to do
(安妮曾去过瑞典和肯尼亚 - 因此这些国家的宏观标记为红色)(本尼去过俄罗斯和西班牙)(等等)
只制作一个代码会更有效率,这对于Worksheets("All").
中具有值的所有列都是如此。我需要能够拥有至少50个带有名称的列(Annie,Benny,Charlie,Danny,Emma,Fabian等)等等..)
这可能吗?
这是我的代码,到目前为止(对于“Benny”):
Sub findDuplicatesBenny()
Dim rng1, rng2, cell1, cell2 As Range
Set rng1 = Worksheets("All").Range("Benny")
Set rng2 = Worksheets("Benny").Range("A:A")
For Each cell1 In rng1
If IsEmpty(cell1.Value) Then Exit For
For Each cell2 In rng2
If IsEmpty(cell2.Value) Then Exit For
If cell1.Value = cell2.Value Then
cell1.Interior.ColorIndex = 22
cell1.Interior.Pattern = xlSolid
End If
Next cell2
Next cell1
End Sub
任何帮助都感激不尽!
要使用条件格式执行此操作,您可以使用INDIRECT
和第1行中的名称(Annie,Benny等)来创建对每个名称的相应工作表的引用。然后使用COUNTIF
,您可以计算重复数。
=COUNTIF(INDIRECT("'"&A$1&"'!A:A"),A1)
编辑:
只是为了更彻底地解释......这个公式的两个主要部分:
COUNTIF
:用于计算符合条件的单元格数。暂时忽略INDIRECT
,并使用单元格A2
的例子,上面的公式相当于=COUNTIF(Annie!A:A,A2)
,它查看A
表上的Annie
列并计算Sweden
的所有实例。这将返回1
。如果你要拖下那个公式,在A3
它将返回1
为Kenya
,在A4
,0
为美国等等。
在另一栏中,你可以创建一个类似的引用COUNTIF
的Benny
,结果相似 - 0
代表瑞典,一直到1
为俄罗斯和西班牙。
INDIRECT
:返回由文本字符串指定的引用。上面的公式使用INDIRECT
来制作表格和范围参考(Annie!A:A
,Benny!A:A
等)动态。首先解释一下文本字符串:"'"&A$1&"'!A:A"
。这导致'Annie'!A:A
和'Benny'!A:A
等:
在INDIRECT
中使用这些文本引用成为范围引用。通过将INDIRECT
包裹在COUNTIF
中,该公式有效地相当于上面的=COUNTIF(Annie!A:A,A2)
- 我们刚刚使Annie!A:A
动态。请注意,我在'
之前和之后包含单引号'Annie'!A:A
。如果工作表名称中有空格,则需要这样做,例如如果名字是Annie Marie
。
对于条件格式 - 如果公式输入计算为TRUE
,则应用格式。我正在使用一个轻微的技巧,条件格式的0
相当于FALSE
和1或更多是TRUE
。因此格式化将应用于COUNTIF
返回1或更多的任何单元格。这就是重复标记/填充的方式。