我有一个包含两列(A 和 B)的电子表格。我想(FOR)循环遍历 B 列,直到两个或多个单元格值匹配。对于在 B 列中匹配的单元格,我想遍历它们在 A 列中的对应值。如果它们的对应值不相同,我希望所有涉及的行都被突出显示。
我知道它不正确/不完整,但以下是我想遵循的基本结构。非常感谢任何和所有帮助。谢谢你。
Sub MySUb()
Dim iRow As Integer
For iRow = 2 To ActiveSheet.UsedRange.Rows.Count
If Trim(range("A" & iRow)) <> "" And Trim(range("B" & iRow)) = Trim(range("B" & iRow)) Then
range("A" & iRow, "B" & iRow).Interior.ColorIndex = 6
End If
Next
End Sub
最佳答案
您可以先根据 B 列进行排序,然后将代码修改为:
Sub MySUb()
Dim iRow As Integer
For iRow = 1 To ActiveSheet.UsedRange.Rows.Count
If Trim(Range("A" & iRow).Text) <> "" And _
Trim(Range("B" & iRow).Text) = Trim(Range("B" & iRow + 1).Text) And _
Trim(Range("A" & iRow).Text) <> Trim(Range("A" & iRow + 1).Text) Then
Range("A" & iRow, "B" & iRow).Interior.ColorIndex = 6
Range("A" & iRow + 1, "B" & iRow + 1).Interior.ColorIndex = 6
End If
Next
End Sub
编辑:
这是一个更好的解决方案,它可以处理在 B 列中有 >2 个匹配单元格但 A 中的相应单元格不匹配(即其中至少一个是不同的)的情况。在这种情况下 全部 这些细胞被标记。
Sub MySUb()
Dim iRow As Integer
Dim jRow As Integer
Dim kRow As Integer
For iRow = 1 To ActiveSheet.UsedRange.Rows.Count
'If Trim(Range("A" & iRow).Text) <> "" Then
For jRow = iRow To ActiveSheet.UsedRange.Rows.Count 'Finds the last non-matching item in B
If Trim(Range("B" & jRow).Text) <> Trim(Range("B" & iRow).Text) Then
Exit For
End If
Next jRow
For kRow = iRow To jRow - 1
If Trim(Range("A" & iRow).Text) <> Trim(Range("A" & kRow).Text) Then
Range("A" & iRow, "B" & kRow).Interior.ColorIndex = jRow + 1 'Or can be 6
End If
Next kRow
Next iRow
End Sub
关于VBA 循环突出显示不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23252352/