2012-11-14 34 views
0

我发现一个宏,突出重复Excel宏,突出价值的第一个实例在一列

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

只要改变对从'rngCell'测试柱的顶部的范围 –

回答

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

@DanielCook,我会用你在答案中的相同方式使用条件格式,但问题被标记为* vba *,并且keeg已经有了代码。 – SeanC

0

快速修复:

限定计数器

昏暗CNT作为整数

集它为1

CNT = 1

添加一个用于每loopstep

CNT = CNT + 1

并添加语句跳过循环语句如果CNT等于1

如果(CNT == 1)然后继续对于

2

只是因为,这里的作品一样肖恩柴郡的一个条件格式选项代码:

=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比循环好得多。 – brettdj

相关问题