Excel VBA突出显示活动列中的重复项

时间:2014-01-28 07:47:50

标签: excel-vba vba excel

我正在尝试创建一个宏,该宏将突出显示正在输入文本的列中的重复项。

我有54列,并希望在输入文本时突出显示每列中的重复项。场景是:如果在列B中输入两次“STAPLES”,则突出显示单元格(B3,B22)。我想要一个可以为每列执行此操作的宏,因此,如果只有一次没有任何事情发生在“E”中,“STAPLES”将被输入到列E中。

使用条件格式= COUNTIF不一定有帮助(由于将列复制到新工作表的工作流程)。

我已经有了这个宏:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)


Dim Rng As Range
Dim cel As Range

'Test for duplicates in a single column
'Duplicates will be highlighted in red


Set Rng = Range(Range("C1"), Range("C" & Rows.Count).End(xlUp))


For Each cel In Rng
    If WorksheetFunction.CountIf(Rng, cel.Value) > 1 Then

cel.Interior.ColorIndex = 3
    End If
Next cel

End Sub

它工作正常但仅适用于一列(“C”)。

如何将范围设置为活动列?

我试图将Rng更改为

'Set Rng = Range(ActiveCell,ActiveCell.Column.End(xlUp)) 

但这显然是错误的。

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

试试这个:

Set Rng = Range(Cells(1, Target.Column), Cells(Rows.Count, Target.Column).End(xlUp))

最好使用Worksheet_Change事件代替Worksheet_SelectionChange

顺便说一下,有重复的特殊CF:

enter image description here


<强> UPD: 如果您想使用VBA,请尝试以下代码:

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Rng As Range
    Dim cel As Range
    Dim col As Range
    Dim c As Range
    Dim firstAddress As String



    'Duplicates will be highlighted in red
    Target.Interior.ColorIndex = xlNone
    For Each col In Target.Columns
        Set Rng = Range(Cells(1, col.Column), Cells(Rows.Count, col.Column).End(xlUp))
        Debug.Print Rng.Address

        For Each cel In col
            If WorksheetFunction.CountIf(Rng, cel.Value) > 1 Then
                Set c = Rng.Find(What:=cel.Value, LookIn:=xlValues)
                If Not c Is Nothing Then
                    firstAddress = c.Address
                    Do
                        c.Interior.ColorIndex = 3
                        Set c = Rng.FindNext(c)
                    Loop While Not c Is Nothing And c.Address <> firstAddress
                End If
            End If
        Next
    Next col

End Sub