オートフィルタで重複しているか判定する
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行目のセルです。この表は説明用のサンプルです。
実行前
| A | B | C | |
|---|---|---|---|
| 1 | 商品 | 数量 | 単価 |
| 2 | りんご | 1 | 100 |
| 3 | みかん | 2 | 100 |
| 4 | りんご | 3 | 100 |
| 5 | ぶどう | 4 | 100 |
| 6 | りんご | 5 | 100 |
| 7 | みかん | 6 | 100 |
| 8 | 桃 | 7 | 100 |
| 9 | ぶどう | 8 | 100 |
| 10 | 梨 | 9 | 100 |
| 11 | 桃 | 10 | 100 |
実行後
| A | B | C | |
|---|---|---|---|
| 1 | 商品 | 数量 | 単価 |
| 2 | りんご(注目セル) | 1 | 100 |
| 4 | りんご(注目セル) | 3 | 100 |
| 6 | りんご(注目セル) | 5 | 100 |
色付きは注目する場所です。「—」は未入力、「(空文字)」は数式などが返す空の文字列を表します。
全行表示から実行する例です。その他の行は削除されず、フィルターで非表示になります。MsgBoxは「表示件数: 3」と「重複あり: True」を改行して表示します。
使い方・実行手順を確認する4つの手順で、コードの使い方を確認できます
- 1
練習用のブックを.xlsm形式で保存し、Sheet1という名前のシートを用意します。A1:C11に見出し付きの表を作ります。A列の商品コードの一部を重複させ、すべての行を表示しておきます。
- 2
Alt+F11でVBEを開き、[挿入]→[標準モジュール]へコードを貼り付けます。
- 3
Field:=1は表の左から1列目、A2が調べる値です。
- 4
マクロ内にカーソルを置いてF5で実行します。同じコードの行が表示され、2件以上ならTrueになります。