【VBAリファレンス|実務向け】【Excel】重複データを瞬時に整理!「フィルタ詳細設定」と「VBA自動化」活用術

スポンサーリンク

1. 導入:なぜ重複データの処理が重要なのか

実務において、名簿や売上データなどを扱っていると、どうしても発生してしまうのが「重複データ」です。重複したまま集計や分析を行うと、売上が二重にカウントされたり、配布物の数が合わなかったりと、ミスに直結します。手作業で一つずつ削除するのは非効率ですし、ミスも起きやすいものです。今回は、Excel標準機能の「フィルタ詳細設定」と、それをVBAで自動化する方法を解説します。

2. 基礎知識:フィルタ詳細設定とは

Excelには、単なる「オートフィルタ」よりも高度な抽出が可能な「詳細設定(フィルタオプション)」という機能があります。この機能の最大の特徴は、「重複するレコードは無視する」というチェックボックスがあることです。これを使うことで、データを物理的に削除することなく、ユニーク(一意)なデータだけを瞬時に表示させることができます。

3. 実装/解決策:標準機能での手順

まずは手動での操作手順を確認しましょう。
1. データ範囲(見出しを含む)を選択します。
2. [データ]タブの[詳細設定]をクリックします。
3. ダイアログ内の「重複するレコードは無視する」にチェックを入れます。
4. 「OK」を押すと、重複行が隠され、ユニークなデータのみが表示されます。
※解除したい場合は、[データ]タブの[クリア]ボタンを押せば元に戻ります。

4. サンプルプログラム:VBAで重複排除を自動化する

現場では「この作業を毎日行う」「抽出結果を別のシートにコピーしたい」といったニーズが多いものです。以下のコードは、A列のデータを重複なしで抽出して、別シートへコピーする実用的なスクリプトです。

Sub ExtractUniqueData()
‘ 画面更新を停止して高速化
Application.ScreenUpdating = False

Dim wsSource As Worksheet, wsDest As Worksheet
Set wsSource = ThisWorkbook.Sheets(“Sheet1”)
Set wsDest = ThisWorkbook.Sheets(“Sheet2”)

‘ Sheet2の既存データをクリア
wsDest.Cells.Clear

‘ 重複を無視してSheet1のA列をSheet2のA1へコピー
‘ Unique:=True が重複排除の肝です
wsSource.Range(“A1”, wsSource.Cells(Rows.Count, “A”).End(xlUp)).AdvancedFilter _
Action:=xlFilterCopy, _
CopyToRange:=wsDest.Range(“A1”), _
Unique:=True

Application.ScreenUpdating = True
MsgBox “重複を除いたリストを作成しました。”
End Sub

5. 応用・注意点:現場で陥りやすいバグの回避策

実務でこの機能を使う際、以下の2点に注意してください。

・見出し行の重要性:詳細設定は「見出し(フィールド名)」がないと正しく動作しません。必ず1行目には項目名を入れましょう。
・空白セルの扱い:データ範囲内に空白セルが含まれていると、それも「一つのデータ」として扱われ、結果に空白が混じることがあります。VBAで扱う際は、事前に空セルを削除するか、`Range`を動的に取得するように工夫するのがコツです。

これらの手法を使いこなせば、データ整理にかかる時間を大幅に短縮できます。ぜひ、日々の業務で活用してみてください。

タイトルとURLをコピーしました