excelmacros突出显示列中值的第一个实例

我发现了一个突出重复的macros

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 

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

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

此修改将只运行数据testing行,而不是运行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 

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

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

编辑:

这是一个独立于列的条件格式方法的改进forms:

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

编辑2:

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

 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 

快速解决:

定义计数器

Dim cnt As Integer

将其设置为1

cnt = 1

为每个循环添加一个

cnt = cnt + 1

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

if(cnt == 1)然后继续