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

理由は、SeanCheshireのコードと同じように機能する条件付きフォーマットオプションです。

=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:

本当にコードを使用したい場合は、以下は選択したすべてのセルに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

クイックフィックス:

カウンターの定義

Dim cnt As Integer

1に設定します

cnt = 1

ループステップごとに 1 つ追加

cnt = cnt + 1

cnt が 1 の場合にループ ステートメントをスキップするステートメントを追加します。

if( cnt==1 ) その後、続行します

于 2012-11-14T16:51:24.483 に答える