Excel VBAで重複データを除外する方法

2024年3月31日

重複データを除去するVBAのサンプルアプリを紹介します。手作業で一つずつ重複を確認するのは非効率ですが、今回の方法を使えば一つのボタンで簡単に重複を排除できます。

重複データを取り除くサンプルアプリの説明

会社一覧に入力された重複データを、"重複削除"ボタンをクリックすることで除去できます。処理後のデータは右側に表示されます。

重複削除で利用する Dictionary オブジェクト

Dictionaryオブジェクトはキーとデータのペアを格納できる便利なオブジェクトです。このサンプルでは、重複を管理するために活用されています。
Dictionaryオブジェクトを使うとキーとデータをセットで格納することができます。
別名「連想配列」と呼ばれています。
配列との違いは配列がインデックス番号と要素の値がセットなのに対して、連想配列はキーとデータがセットになっています。また連想配列はキーを重複させることはできません。

Dictionaryオブジェクトを使用するには以下のように記述します。
'オブジェクトを宣言
Dim Dic As Object
'CreateObject関数を使ってオブジェクト型の変数に格納
Set Dic = CreateObject(“Scripting.Dictionary”)

Dictionaryオブジェクトのプロパティ

プロパティ説明
Count連想配列に格納された要素の数
Item(key)キーに関連付けられたデータ
Key(key)キー
CompareModeキーを区別する際に、大文字と小文字を区別するか否か指定
vbBinaryCompare(0)  大文字・小文字、ひらがな・カタカナ、全角・半角を区別します
vbTextCompare(1)  大文字・小文字、ひらがな・カタカナ、全角・半角を区別しません

Dictionaryオブジェクトのメソッド

メソッド説明
Add key, itemキーに項目を関連付けて追加
Exists(key)指定したキーが存在すればTrueを返す
Items連想配列の項目を配列にして返す
配列のインデックス番号0(ゼロ)から
Keys連想配列のキーを配列にして返す
配列のインデックス番号0(ゼロ)から
Remove keyキーと関連付けられたデータのペアを削除
RemoveAll全てのキーと項目を削除

サンプルアプリのソースコード  コードの作成手順はこちら

Sub 重複削除()

  'ワークシートを指定する
   Dim Sh1 As Worksheet
   Set Sh1 = ThisWorkbook.Worksheets("Sheet1")

 '変数を定義します。
   Dim Dic, i As Long, K As Long, buf As String, Keys
 
 'Dictionaryオブジェクトの宣言
   Set Dic = CreateObject("Scripting.Dictionary")

  'データの最終行を取得        
   K = Sh1.Cells(Rows.Count, 2).End(xlUp).Row
   
 '重複データの排除 
   For i = 6 To K
    buf = Sh1.Cells(i, 2).Value
  '同じデータがなければbuf変数に追加
    If Not Dic.Exists(buf) Then
        Dic.Add buf, buf
    End If
   Next i
   
  '重複データを排除したデータを出力
    Keys = Dic.Keys
    For i = 0 To Dic.Count - 1
        Sh1.Cells(i + 5, 4) = Keys(i)
    Next i
    Set Dic = Nothing

  '重複削除データの並び替え
    Range("D4:D14").Sort _
        Key1:=Range("D4"), Order1:=xlAscending, _
        Header:=xlYes

End Sub

まとめ

今回は、Excel VBAを使った重複データの除去方法について解説しました。手作業での除去作業を効率化するために、ぜひこの方法をご活用ください。また、1クリックで重複箇所を削除する方法については、以下のリンク先をご参照ください。
 https://scodebank.com/?p=1782