Excel VBAで重複データを除外する方法
重複データを除去する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
ディスカッション
コメント一覧
まだ、コメントがありません