🔄
HighlightDuplicateValues
データ処理選択範囲内の重複する値のセルをハイライト表示します
選択した列または範囲内で重複している値を自動検出し、背景色を付けて視覚的に強調表示するマクロです。Excelの条件付き書式でも重複ハイライトは可能ですが、このマクロはVBAで処理するため、条件付き書式の設定が難しい方でも簡単に使えます。データ入力ミスの発見・重複レコードの目視確認・名寄せ作業の前処理として活躍します。ハイライト色は変更可能で、処理後のクリアも簡単です。2回以上出現する値のセルすべてに色を付けるため、「どれとどれが重複しているか」がひと目で分かります。RemoveDuplicatesがいきなり行を削除するのに対し、こちらは「消す前に目で確認したい」場面に適しており、2つを組み合わせることで安全な重複整理のワークフローが完成します。色付けされたセルはフィルターの「色でフィルター」で絞り込むこともできます。

📖 使い方
- VBAエディタを開く(Alt + F11)
- モジュールを挿入(挿入 > モジュール)
- 下記VBAコードをコピー&ペースト
- ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: チェックしたいセル範囲を選択してから HighlightDuplicateValues を実行します
🎯 活用シーン
- ✓顧客IDや社員番号など、ユニークであるべきデータに重複が混入していないか一目で確認したいとき
- ✓データ入力後の品質チェックとして、誤って同じ値を入力してしまった箇所を視覚的に特定したいとき
- ✓名寄せ作業の前処理として、同一顧客・同一商品と思われる重複レコードを目視で確認したいとき
- ✓請求データに同じ請求番号が二重登録されていないか、支払処理前の最終チェックを行いたいとき
- ✓イベント申込リストで同一人物の二重申込を確認し、繰り上げ処理や連絡の要否を判断したいとき
💡 実装のヒント
- ▸ハイライトをクリアしたい場合は、同じ範囲を選択して「セルの書式設定」から背景色をなしに設定するか、書式クリアのマクロを使用してください。
- ▸重複の判定は値の完全一致で行われます。全角・半角の違いや前後のスペースも別の値として扱われるため、事前にNormalizeDataやTrimSpacesで整形することをお勧めします。
- ▸非常に大きな範囲(数千行以上)で実行すると処理に時間がかかる場合があります。そのような場合は範囲を絞って実行してください。
- ▸ハイライト後に「データ」タブの色フィルターを使えば、重複行だけを表示して詳細を確認できます。
- ▸確認が済んだらRemoveDuplicatesで削除する、という2段階運用にすると誤削除のリスクを最小化できます。
💻 VBAコード
' HighlightDuplicateValues
' -----------------
' Macro Name: HighlightDuplicateValues
' Description: 選択範囲内の重複する値のセルをハイライト表示します
' Parameters: なし
' Returns: なし
' Usage: チェックしたいセル範囲を選択してから HighlightDuplicateValues を実行します
' -----------------
Sub HighlightDuplicateValues()
On Error GoTo ErrorHandler
Dim rng As Range
Dim cell As Range
Dim checkCell As Range
Dim highlightCount As Long
If TypeName(Selection) <> "Range" Then
MsgBox "セル範囲を選択してから実行してください", vbCritical, "エラー"
Exit Sub
End If
Set rng = Selection
highlightCount = 0
rng.Interior.ColorIndex = xlNone
For Each cell In rng
If Not IsEmpty(cell) Then
For Each checkCell In rng
If checkCell.Address <> cell.Address And checkCell.Value = cell.Value Then
If cell.Interior.ColorIndex = xlNone Then
cell.Interior.Color = RGB(255, 153, 153)
highlightCount = highlightCount + 1
End If
Exit For
End If
Next checkCell
End If
Next cell
MsgBox highlightCount & " セルの重複値をハイライトしました", vbInformation, "完了"
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました:" & vbCrLf & Err.Description, vbCritical, "エラー"
End Sub