如何使用VBA在Excel中使用其单元格值在每列中查找重复项?

时间:2015-05-19 11:20:28

标签: excel vba excel-vba

我想找到重复项,并使用我们指定的单元格值在Excel 2010中的活动工作表的每一列中突出显示它。例如,有5列,即#34; S.No"," ID"," Name"," Desc",&#34 ;金额"这是默认值(注意:列值始终相同,而列号可能每次都不同)。所以,在这种情况下,我想根据列值找到重复项。如果列X =" S.No"然后,找到重复项并突出显示它..和/或如果列X =" ID"找到重复并突出显示它。

我有一个代码,但这只适用于A列。请帮助我提供更新,以便在活动工作表的每一列中查找所有重复项,如上所述。

Sub DupEntry()
Dim cel As Variant
Dim rng As Range
Dim clr As Long
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Set rng = Range("A1:A" & Range("A1048576").End(xlUp).Row)
rng.Interior.ColorIndex = xlNone
clr = 3
For Each cel In rng
If Application.WorksheetFunction.CountIf(rng, cel) > 1 Then
If WorksheetFunction.CountIf(Range("A1:A" & cel.Row), cel) = 1 Then
cel.Interior.ColorIndex = clr
clr = clr + 1
Else
cel.Interior.ColorIndex = rng.Cells(WorksheetFunction.Match(cel.Value, rng, False), 1).Interior.ColorIndex
End If
End If
Next
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

1 个答案:

答案 0 :(得分:0)

使用"条件格式"可以达到预期的效果。 Excel工作表中的功能:

  1. 选择A栏

  2. 点击条件格式菜单按钮,然后选择"突出显示细胞规则"和"复制值":从下拉列表中指定颜色。

  3. 对其他列重复相同的步骤。

  4. 如果您希望使用VBA解决方案突出显示不同颜色的重复项,那么只需将其应用于其他列:查看该行

    Set rng = Range("A1:A" & Range("A1048576").End(xlUp).Row)
    

    所以,而不是列" A"使用Column" B"等。我建议在指定的Columns范围内使用迭代。只需稍作更改即可实现,如以下示例代码段所示:

    Sub DupEntry()
    Dim cel As Variant
    Dim rng As Range
    Dim clr As Long
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    
    'Sample Array of Columns
    Dim Col(1 To 3) As String
    Col(1) = "A"
    Col(2) = "B"
    Col(3) = "C"
    
    'Iterate through Columns
    For i = 1 To 3
        'Set rng = Range("A1:A" & Range("A1048576").End(xlUp).Row)
        Set rng = Range(Col(i) & "1:" & Col(i) & Range(Col(i) & "1048576").End(xlUp).Row)
        rng.Interior.ColorIndex = xlNone
        clr = 3
        For Each cel In rng
            If Application.WorksheetFunction.CountIf(rng, cel) > 1 Then
                'If Application.WorksheetFunction.CountIf(Range("A1:A" & cel.Row), cel) = 1 Then
                If Application.WorksheetFunction.CountIf(Range(Col(i) & "1:" & Col(i) & cel.Row), cel) = 1 Then
                    cel.Interior.ColorIndex = clr
                    clr = clr + 1
                Else
                    cel.Interior.ColorIndex = rng.Cells(WorksheetFunction.Match(cel.Value, rng, False), 1).Interior.ColorIndex
                End If
            End If
        Next
    Next i
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    End Sub
    

    (原始代码行被注释掉)。或者,您可以使用单元格R1C1表示法。

    希望这会有所帮助。最好的问候,