〖ExcelVBA〗指定列の重複回数をカウントして表示するマクロ|同じ値が何回出てくるか一目で分かる

ExcelVBA

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) &gt; 1 Then
    ws.Rows(r).Interior.Color = RGB(255, 230, 230)
End If

→ 重複データだけ色付けできます。


② 重複がある行だけ「重複あり」と表示したい

If dict(key) &gt; 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

キーを工夫するだけで、柔軟な重複判定ができます。


実行手順

  1. 対象データがあるシートを表示
  2. Alt + F11 → 標準モジュールを追加
  3. マクロを貼り付け
  4. CountDuplicateValues を実行

まとめ:重複回数が分かるとデータチェックが一気に楽になる

単に「重複しているかどうか」だけでなく、 何回出てきているかが分かると、データの見え方が変わります。

  • 異常値の発見が早くなる
  • 集計前のチェックが楽になる
  • VBAで自動化すれば再利用できる

名簿・ID管理・商品データなど、
重複が気になる表でぜひ活用してみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
いがぴをフォローする

コメント

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