【发布时间】:2020-03-13 09:43:42
【问题描述】:
我基本上是在尝试创建一个 VBA,它可以在整个工作簿中查找重复项,将它们突出显示为红色,并列出相邻单元格中重复项的单元格地址。不确定这是否可能。我可以让它在单个工作表中以红色突出显示重复项,但不能在工作簿中突出显示。而且不知道如何让它报告cell.address。基本上 FIND 函数的作用是,当我 Ctrl+F 和“查找全部”时,它会列出所有重复项和重复项的单元格地址。但我需要它能够检查数百行数据的多个工作表,而不是一次搜索一个。
例如(抱歉无法在自动柜员机中嵌入图片)
表 1:
A -- B
1 Animal -- Duplicate
2 cat -- SHEET1 A5, SHEET2 A5
3 turtle
4 raccoon -- SHEET2 A4
5 cat -- SHEET1 A2, SHEET2 A5
6 monkey -- SHEET2 A7
7 whale
表 2:
A -- B
1 Animal -- Duplicate
2 dog
3 rat
4 raccoon -- SHEET1 A4
5 cat -- SHEET1 A2, SHEET1 A5
6 lizard
7 monkey -- SHEET1 A6
这样的事情可能吗?
编辑 我最初使用它来突出显示红色 - 但我现在有更多的床单,这会变得很长。 我知道我需要类似..“对于 ThisWorkbook.Worksheets 中的每个 ws”,但不确定在哪里以及如何更改我必须使用它的内容.. 我觉得我需要一些完全不同的东西并且无法使用我现有的代码。然后将 cell.address 添加到相邻的单元格中完全暗示了我。
Sub Duplicate_Digits()
Dim s1 As Worksheet: Set S1 = ThisWorkbook.Sheets("Sheet1")
Dim s2 As Worksheet: Set S2 = ThisWorkbook.Sheets("Sheet2")
Dim s3 As Worksheet: Set S3 = ThisWorkbook.Sheets("Sheet3")
Dim Numbers1, Numbers2, Numbers3, i
Dim Found As Range
Dim ws As Worksheet
Numbers1 = s1.Range("A2:A" & s1.Range("A" &
s1.Rows.Count).End(xlUp).Row).Value
Numbers2 = s2.Range("A2:A" & s2.Range("A" &
s2.Rows.Count).End(xlUp).Row).Value
Numbers3 = s3.Range("A2:A" & s3.Range("A" &
s3.Rows.Count).End(xlUp).Row).Value
For i = LBound(Numbers2, 1) To UBound(Numbers2, 1)
Set Found = s1.Range("A:A").Find(Numbers2(i, 1))
If Not Found Is Nothing Then
Found.Interior.Color = vbRed
End If
Set Found = Nothing
Next i
For i = LBound(Numbers3, 1) To UBound(Numbers3, 1)
Set Found = s1.Range("A:A").Find(Numbers3(i, 1))
If Not Found Is Nothing Then
Found.Interior.Color = vbRed
End If
Set Found = Nothing
Next i
For i = LBound(Numbers1, 1) To UBound(Numbers1, 1)
Set Found = s2.Range("A:A").Find(Numbers1(i, 1))
If Not Found Is Nothing Then
Found.Interior.Color = vbRed
End If
Set Found = Nothing
Next i
For i = LBound(Numbers3, 1) To UBound(Numbers3, 1)
Set Found = s2.Range("A:A").Find(Numbers3(i, 1))
If Not Found Is Nothing Then
Found.Interior.Color = vbRed
End If
Set Found = Nothing
Next i
For i = LBound(Numbers1, 1) To UBound(Numbers1, 1)
Set Found = s3.Range("A:A").Find(Numbers1(i, 1))
If Not Found Is Nothing Then
Found.Interior.Color = vbRed
End If
Set Found = Nothing
Next i
For i = LBound(Numbers2, 1) To UBound(Numbers2, 1)
Set Found = s3.Range("A:A").Find(Numbers2(i, 1))
If Not Found Is Nothing Then
Found.Interior.Color = vbRed
End If
Set Found = Nothing
Next i
End Sub
编辑
【问题讨论】:
-
可能,是的,您需要遍历所有工作表...首先弄清楚如何自己完成所有工作,然后如果您有问题,您可以展示您正在处理的代码.
-
已编辑以包含我正在使用的代码,这是很久以前的。老实说,我不知道如何从这里走。自从我使用 VBA 以来已经有一段时间了。
标签: excel vba duplicates