【VBAリファレンス|実務向け】現場で役立つ!Excelの重複データチェックとVBAによる自動化テクニック

スポンサーリンク

導入: なぜ「重複チェック」が重要なのか

実務において、顧客リストや売上データなどを管理する際、「意図しないデータの重複」は大きなトラブルの元となります。例えば、同じ顧客が二重に登録されていたり、管理コードが重複していたりすると、集計ミスや不要な二重対応が発生し、業務の信頼性を損ないます。

本記事では、Excelの標準機能である「条件付き書式」を使った視覚的な確認方法と、その処理をVBAで自動化して実務を効率化するテクニックを解説します。

基礎知識: COUNTIF関数の役割

重複チェックの核となるのが「COUNTIF関数」です。この関数は「指定した範囲の中で、条件に一致するセルがいくつあるか」をカウントします。
数式 =COUNTIF(範囲, 検索条件)

今回の重複チェックでは、範囲全体の中に「自分自身と同じ値がいくつあるか」を数えます。結果が「1」であれば重複なし、「2以上」であれば重複していると判断できるため、これを条件付き書式やVBAのロジックに組み込みます。

実装: 条件付き書式による視覚的チェック

まずは、Excelの標準機能で素早く確認する方法です。
1. 重複を確認したいセル範囲(例: A2:A100)を選択します。
2. [ホーム]タブの[条件付き書式]から[新しいルール]を選択します。
3. [数式を使用して、書式設定するセルを決定]を選び、以下の数式を入力します。
=COUNTIF($A$2:$A$100, A2)>1
4. [書式]ボタンから、重複時に適用したい塗りつぶし色などを設定し、[OK]を押します。
これで、重複しているセルが瞬時に強調表示されます。

サンプルプログラム: VBAで重複行を自動抽出する

実務では、単に色を塗るだけでなく「重複データを別のシートに書き出す」といった自動化が求められます。以下のコードは、指定列の重複を検出し、重複しているセルを赤色にするシンプルなVBAマクロです。

Sub HighlightDuplicates()
Dim rng As Range
Dim cell As Range

‘ 重複をチェックする範囲を設定(A列の2行目から最終行まで)
Set rng = Range(“A2:A” & Cells(Rows.Count, “A”).End(xlUp).Row)

‘ 範囲内の各セルをループ処理
For Each cell In rng
‘ COUNTIF関数を使って重複を判定
If Application.WorksheetFunction.CountIf(rng, cell.Value) > 1 Then
‘ 重複していれば背景色を赤にする
cell.Interior.Color = vbRed
Else
‘ 重複していなければ色を解除
cell.Interior.Color = xlNone
End If
Next cell

MsgBox “重複チェックが完了しました。”
End Sub

応用・注意点: 実務での効率化アドバイス

1. 大量データの処理速度
VBAで数万行のデータを処理する場合、上記のようなセル単位のループ(For Each)は時間がかかります。その場合は、配列(Array)に取り込んでメモリ上で判定するか、一度「重複の削除」機能や「ピボットテーブル」で集計する手法を検討してください。

2. 部分一致の落とし穴
「全角・半角」や「スペースの有無」の違いは、COUNTIFでは「別物」として扱われます。データ入力のルールが徹底されていない場合は、事前に「SUBSTITUTE関数」でスペースを除去するなど、クレンジング処理を組み込むことが正確性を高めるコツです。

3. 運用ルールを決める
重複が見つかった際に「自動削除する」のか「担当者にフラグを立てて確認させる」のか、業務フローを明確にしておきましょう。安易な自動削除は、必要なデータまで消してしまうリスクがあるため注意が必要です。

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