我试图创建一个宏来搜索B列以查找相同字符串的重复项,然后突出显示从A列到I列的重复项
我设法创建突出正确细胞的东西,但似乎无法找到重复的东西。不完全确定我在哪里出错了,但我认为这可能是因为我调整了一张看过两张纸的前宏
代码:
Sub Duplicate()
Dim rng1 As Range, rng2 As Range, rng3 As Range, i As Long, j As Long
Dim w1 As Worksheet
Set w1 = Worksheets("Sheet1")
For i = 1 To w1.Range("B" & Rows.Count).End(xlUp).Row
Set rng1 = w1.Range("B" & i)
For j = 1 To w1.Range("B" & Rows.Count).End(xlUp).Row
Set rng2 = w1.Range("B" & j)
Set rng3 = w1.Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 9))
If StrComp(Trim(rng1.Text), Trim(rng2.Text), vbTextCompare) = 0 Then
rng3.Interior.Color = RGB(168, 188, 255)
End If
Set rng2 = Nothing
Next j
Set rng1 = Nothing
Next i
End Sub
答案 0 :(得分:0)
目前我看到一个问题,你指的是Activecell,但是你永远不会激活或选择任何单元格或范围。这会使您在运行宏时选择的单元格上的颜色发生更改而不会更改。如果用变量i替换activecell.row,宏应该可以正常工作。
答案 1 :(得分:0)
您始终将rng3
设置为相同的单元格,因为您永远不会更改活动单元格。此外,您实际上不需要额外的范围,因为您已经遍历了单元格。
Sub Duplicate()
Dim rng1 As Range, rng2 As Range, rng3 As Range, i As Long, j As Long
Dim w1 As Worksheet
Set w1 = Worksheets("Sheet1")
For i = 1 To w1.Range("B" & Rows.Count).End(xlUp).Row
Set rng1 = w1.Range("B" & i)
For j = 1 To w1.Range("B" & Rows.Count).End(xlUp).Row
If j <> i Then
Set rng2 = w1.Range("B" & j)
If StrComp(Trim(rng1.Text), Trim(rng2.Text), vbTextCompare) = 0 Then
rng1.Interior.Color = RGB(168, 188, 255)
rng2.Interior.Color = RGB(168, 188, 255)
End If
Set rng2 = Nothing
End If
Next j
Set rng1 = Nothing
Next i
End Sub
答案 2 :(得分:0)
这必须在VBA内吗? Excel中的条件格式设置功能可以执行此操作,而无需依赖宏。这也应该比运行VBA更快地刷新。为此,您必须依赖条件格式中的相对引用,这些引用在您设置规则时相对于activecell。
=COUNTIF($B$1:$B$6,$B1)>1
,将第一个变量替换为B列中的整个范围。引用$B1
上的单个美元符号非常重要,因为它告诉它检查B列而不管哪个列格式正在应用于。