Excelでデータを扱っていると、次のようなことはありませんか?
- 同じ名前・ID・商品コードが何回出てくるか知りたい
- 重複データが「何件あるか」を確認したい
- COUNTIF関数ではなく、VBAで一括処理したい
そこで今回は、指定した列の値が「何回出現しているか」を自動でカウントし、別の列に表示するExcelVBAマクロを紹介します。
関数を使わなくても、ワンクリックで重複回数が分かるので、
名簿管理・データチェック・集計前の確認にとても便利です。
この記事でできること
- 指定列の値ごとに出現回数をカウント
- 各行に「この値は何回出ているか」を表示
- 空白セルは自動で除外
- 何度でも再実行できる
想定するデータ例
今回はこのようなデータを使っていきます。
シート名は任意で問題ありません。

指定列の重複回数をカウントするマクロ(コピペOK)
以下のコードを標準モジュールに貼り付けてください。
Option Explicit
Sub CountDuplicateValues()
Dim ws As Worksheet
Dim lastRow As Long
Dim r As Long
Dim dict As Object
Dim key As String
' ===== 設定 =====
Set ws = ActiveSheet
Const TARGET_COL As Long = 1 ' 重複を調べる列(A列=1)
Const OUTPUT_COL As Long = 3 ' 結果を出す列(C列=3)
' =================
' Dictionary(辞書)を作成
Set dict = CreateObject("Scripting.Dictionary")
' 最終行を取得(TARGET_COL基準)
lastRow = ws.Cells(ws.Rows.Count, TARGET_COL).End(xlUp).Row
' 1回目:出現回数をカウント
For r = 2 To lastRow
key = Trim(CStr(ws.Cells(r, TARGET_COL).Value))
If key <> "" Then
If dict.Exists(key) Then
dict(key) = dict(key) + 1
Else
dict.Add key, 1
End If
End If
Next r
' 2回目:各行に回数を書き込む
For r = 2 To lastRow
key = Trim(CStr(ws.Cells(r, TARGET_COL).Value))
If key <> "" Then
ws.Cells(r, OUTPUT_COL).Value = dict(key)
Else
ws.Cells(r, OUTPUT_COL).ClearContents
End If
Next r
MsgBox "重複回数のカウントが完了しました。", vbInformation
End Sub
コード解説(初心者向け)
① Dictionary(ディクショナリ)とは?
Dictionary は、
「値」と「その回数」をセットで管理できる箱のようなものです。
- key:IDや名前などの値
- item:その値が出てきた回数
重複チェックや回数カウントには、非常によく使われます。
② なぜループを2回回すのか?
1回目のループで「全体の回数」を数え、
2回目のループで「各行に結果を表示」しています。
この形にすると、どの行でも同じ回数を正しく表示できます。
よくある応用
① 重複している行だけを目立たせたい
If dict(key) > 1 Then
ws.Rows(r).Interior.Color = RGB(255, 230, 230)
End If
→ 重複データだけ色付けできます。
② 重複がある行だけ「重複あり」と表示したい
If dict(key) > 1 Then
ws.Cells(r, OUTPUT_COL).Value = "重複あり"
Else
ws.Cells(r, OUTPUT_COL).Value = "重複なし"
End If
③ 複数列を組み合わせて重複を判定したい
たとえば「ID+日付」の組み合わせで判定する場合:
key = ws.Cells(r, 1).Value & "_" & ws.Cells(r, 2).Value
キーを工夫するだけで、柔軟な重複判定ができます。
実行手順
- 対象データがあるシートを表示
- Alt + F11 → 標準モジュールを追加
- マクロを貼り付け
- CountDuplicateValues を実行
まとめ:重複回数が分かるとデータチェックが一気に楽になる
単に「重複しているかどうか」だけでなく、 何回出てきているかが分かると、データの見え方が変わります。
- 異常値の発見が早くなる
- 集計前のチェックが楽になる
- VBAで自動化すれば再利用できる
名簿・ID管理・商品データなど、
重複が気になる表でぜひ活用してみてください。


コメント