根据同一列中的数据突出显示重复项

时间:2015-05-20 11:00:27

标签: excel vba formatting duplicates

我试图创建一个宏来搜索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

3 个答案:

答案 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。

  1. 从A:I
  2. 中选择您的数据
  3. 条件格式&gt;新规则
  4. 选择&#39;使用公式确定要格式化的单元格
  5. 使用公式=COUNTIF($B$1:$B$6,$B1)>1,将第一个变量替换为B列中的整个范围。引用$B1上的单个美元符号非常重要,因为它告诉它检查B列而不管哪个列格式正在应用于。