0

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

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

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

4

3 回答 3

3

仅仅因为,这是一个与 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
于 2012-11-14T20:12:54.290 回答
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
于 2012-11-14T17:19:18.493 回答
0

快速解决:

定义计数器

将 cnt 变暗为整数

将其设置为 1

cnt = 1

为每个循环步骤添加一个

cnt = cnt + 1

如果 cnt 等于 1,则添加语句以跳过循环语句

if( cnt==1 ) 然后继续

于 2012-11-14T16:51:24.483 回答