我找到了一个突出重复的宏
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
但我需要它突出显示除第一个实例以外的所有重复项。也许更好的方法是突出显示唯一值的第一个实例?
答案 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)然后继续