← コード一覧へ戻る
実務フィルター

オートフィルタで重複しているか判定する

A列をA2の値で絞り込み、表示された同じ値の件数から重複を判定します。

実行前に確認

  • 既存の通常のオートフィルター設定を置き換えます。手動で非表示にした行があると件数が変わるため、事前に全行を表示してください。
  • このRange.AutoFilter例はWindows版Excel向けです。Excel for Macではテーブルのフィルターを利用してください。

1サンプルコード

Sub Example1175()
    Dim ws As Worksheet
    Dim key As String
    Dim n As Long
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    If IsError(ws.Range("A2").Value) Then Exit Sub
    key = CStr(ws.Range("A2").Value)
    If Len(key) = 0 Then
        MsgBox "A2に値を入れてください。"
        Exit Sub
    End If
    key = Replace(Replace(Replace(key, "~", "~~"), "*", "~*"), "?", "~?")
    If ws.AutoFilterMode Then ws.AutoFilterMode = False
    ws.Range("A1:C11").AutoFilter Field:=1, Criteria1:="=" & key
    n = Application.WorksheetFunction.Subtotal(103, ws.Range("A2:A11"))
    MsgBox "表示件数: " & n & vbCrLf & "重複あり: " & CStr(n > 1)
End Sub
表で見る処理のイメージ実行前・実行後のセルを見比べる

A2と同じ商品だけを表示し、表示件数で重複を調べます。

A・B・Cは列、1・2・3は行です。例えば「B2」はB列の2行目のセルです。この表は説明用のサンプルです。

実行前

実行前のサンプル。列記号と行番号でセルの位置を確認できます。
ABC
1商品数量単価
2りんご1100
3みかん2100
4りんご3100
5ぶどう4100
6りんご5100
7みかん6100
8桃7100
9ぶどう8100
10梨9100
11桃10100

実行後

実行後のサンプル。列記号と行番号でセルの位置を確認できます。
ABC
1商品数量単価
2りんご(注目セル)1100
4りんご(注目セル)3100
6りんご(注目セル)5100

色付きは注目する場所です。「—」は未入力、「(空文字)」は数式などが返す空の文字列を表します。

全行表示から実行する例です。その他の行は削除されず、フィルターで非表示になります。MsgBoxは「表示件数: 3」と「重複あり: True」を改行して表示します。

使い方・実行手順を確認する4つの手順で、コードの使い方を確認できます
  1. 1

    練習用のブックを.xlsm形式で保存し、Sheet1という名前のシートを用意します。A1:C11に見出し付きの表を作ります。A列の商品コードの一部を重複させ、すべての行を表示しておきます。

  2. 2

    Alt+F11でVBEを開き、[挿入]→[標準モジュール]へコードを貼り付けます。

  3. 3

    Field:=1は表の左から1列目、A2が調べる値です。

  4. 4

    マクロ内にカーソルを置いてF5で実行します。同じコードの行が表示され、2件以上ならTrueになります。

使っている機能の公式ドキュメント(Microsoft Learn)