excel宏以突出显示列中值的第一个实例

时间:2012-11-14 16:45:44

标签: excel vba

我找到了一个突出重复的宏

Public Sub MarkDuplicates()
    Dim iWarnColor As Integer
    Dim rng As Range
    Dim rngCell As Variant


    Set rng = Range("A1:A65000")
    iWarnColor = xlThemeColorAccent2

    For Each rngCell In rng.Cells
        vVal = rngCell.Text
        If (WorksheetFunction.CountIf(rng, vVal) = 1) Then
            rngCell.Interior.Pattern = xlNone
        Else
            rngCell.Interior.ColorIndex = iWarnColor
        End If
    Next
End Sub

但我需要它突出显示除第一个实例以外的所有重复项。也许更好的方法是突出显示唯一值的第一个实例?

3 个答案:

答案 0 :(得分:2)

因为,这是一个条件格式选项,与Sean Cheshire的代码相同:

=COUNTIF(INDIRECT("$A$1:A" & ROW()),INDIRECT("A"&ROW()))>1

编辑:

以下是与列无关的条件格式方法的改进形式:

=COUNTIF(INDIRECT("R1C"&COLUMN()&":R"&ROW()&"C"&COLUMN(),FALSE),INDIRECT("R"&ROW()&"C"&COLUMN(),FALSE))>1

编辑2:

如果您真的想使用代码,则以下内容将第二个条件格式应用于所有选定单元格,将匹配单元格字体设置为红色。这可以很容易地修改为使用任何范围而不是选择。

Dim conditionalFormula As String
conditionalFormula = "=COUNTIF(INDIRECT(""R1C""&COLUMN()&"":R""&ROW()&""C""&COLUMN(),FALSE),INDIRECT(""R""&ROW()&""C""&COLUMN(),FALSE))>1"
With Selection.FormatConditions.Add(xlExpression, , conditionalFormula)
    .Font.ColorIndex = 3
End With

答案 1 :(得分:1)

检查当前单元格上方的范围以查看计数是否大于1,而不是检查整个范围。

此修改也将仅运行带有数据的测试行,如果实际上没有填充任何内容,则不会运行65535个单元

Option Explicit

Public Sub MarkDuplicates()
Dim iWarnColor As Integer
Dim rng As Range
Dim rngCell As Variant
Dim LR As Long
Dim vVal

LR = Cells(Rows.Count, "A").End(xlUp).Row

Set rng = Range("A1:A" & LR)
iWarnColor = xlThemeColorAccent2

For Each rngCell In rng.Cells
    vVal = rngCell.Text
    If (WorksheetFunction.CountIf(Range("A2:A" & rngCell.Row), vVal) = 1) Then
        rngCell.Interior.Pattern = xlNone
    Else
        rngCell.Interior.ColorIndex = iWarnColor
    End If
Next
End Sub

答案 2 :(得分:0)

快速修复:

定义计数器

  

Dim cnt As Integer

将其设为1

  

cnt = 1

为每个循环步骤添加一个

  

cnt = cnt + 1

如果cnt等于1

,则添加语句以跳过循环语句
  

if(cnt == 1)然后继续