【エクセルVBA】重複削除データの作成方法

投稿者: | 2021年1月16日
excelアイコン

エクセルバージョン

マイクロソフト365

 

本日はエクセルVBAで重複削除データの作成方法について解説していきたいと思います(((^-^)))

今回はRemoveDuplicatesメソッドDictionaryオブジェクト2つの方法で重複削除データを作成していきます。

それではいってみましょう!

 

RemoveDuplicatesメソッド

RemoveDuplicatesはエクセルの純正機能のデータ→重複の削除と一緒の動作です。

マクロの記録でVBAコードを記録させるとRemoveDuplicatesが記録されるので、あとはVBAで少し編集すれば柔軟に重複を簡単に削除させることができます。

特徴としては元データをそのまま重複削除します。

 

データが1列のみの重複削除

A列のみの重複データを削除する例

結果

同じ値が重複してる色のみが一瞬で削除されます(*^^)v

下記のような先頭行に見出しがない場合はHeader:= xlNoにします。

1列の重複削除

複数列を指定したい場合

例(A列からC列)

Columns(“A:C”) みたいな感じでも指定できます。

 

データが複数列の値が一致する重複削除

A列B列の2列の値が一致する重複削除サンプル

重複データ

複数列の重複データ

重複してる値は以下になります。

・ハイボール 200
・ハイボール 250
・ビール 200
・ビール 230

結果

2列の重複している値が一瞬で削除されます\(^^)/

下記のような先頭行に品名と金額のような見出しがある場合はHeader:= xlYesにします。

複数列の重複削除後

 

パラメーター

Columns → データが1列のみは1を指定します。

Header:= xlNo / xlYes / xlGuess 

・xlNo → 見出しがないの時に指定(初期値)

・xlYes → 見出しがあるの時に指定

・xlGuess → 見出しがあるかを自動で判別

 

Dictionaryオブジェクト(連想配列)

概要

Dictionaryオブジェクト(連想配列)の特徴

・Dictionaryオブジェクトは 連想配列を作成することができます。

・連想配列とはキーと値が格納ができる配列です。エクセルでも使用ができ、その他のプログラム言語でも連想配列はよく使用します。

・通常の配列はインデックス(添え字0からの番号)で値(要素)を取得しますが、連想配列はキーで値を取得することができます。

・キーは任意の文字などを使用することができます。

 

作成方法

手順は2つのみなので慣れれば簡単です!

手順

➀Dictionaryオブジェクト(連想配列)を作成し、Existsメソッドで重複があるかを判定します。

②連想配列に存在しなかったら、繰り返し処理(ForEach)で、連想配列にキーと値を追加して、キーのみをセルに書きこんで完成です。

 

サンプルコード

今回はA列に下記ようなお酒の重複データを使用して解説します。

重複データ

内容はB列に重複が削除されたデータが出来上がるというサンプルコードです(*^^)v

定数がパラメータになってますのでエクセルの形式がそれぞれ違うと思うので変更してみてください。

下記を標準モジュールにコピペ(*゚▽゚)ノ

【結果】

B列に重複が削除されたデータが出来上がり、データの個数がメッセージボックスに表示されます\(^^)/

重複なしのデータ データの個数

 

サンプルコード解説

まず1番目のハイボールをIF判定して、ハイボールは連想配列のキーにまだ存在しないので、Existsの値がFalse(まだないよ!)なので処理を実行します。

IF判定でFalse(まだないよ!)なので処理が実行されAddメソッドで連想配列のキーに一番目のハイボールが追加されます。この時点で1番目のハイボールは連想配列のキーに存在するので、Existsの値が瞬時にTrue(もうあるよ~)に(ここが重要です)切り替わり、countプロパティが+1されます。

繰り返し処理(ForEach)で2番目のハイボールをIFで判定しますが、ハイボールは既に連想配列に存在するのでIF判定でExistsの値はTrue(もうあるよ~)判定となり、追加処理はなしで次の値に移行します。

次の3番目のレモンサワーは連想配列のキーにまだ存在しないので、IF判定でExistsの値がFalse(まだないよ!)なので②と同じ処理追加をし、countプロパティが+1されて、この時点の合計が2になります。

この流れをデータ分ず~っと繰り返し、B列に重複削除データが作成されていきます(*^^)v

最後のメッセージボックスのデータの個数は、countプロパティでオブジェクト.countで簡単に取得ができます。

 

試す場合は、A列に重複データをセットして実行で、B列に重複削除データがサクッと完成します。

 

まとめ

今回はRemoveDuplicatesメソッドとDictionaryオブジェクトで重複を削除してみました。

DictionaryのExistsメソッドは連想配列のキーが存在するかを判定してくれるので非常にありがたく重宝できますね!

以上です。