【VBA】重複データが存在するか確認する

VBA
この記事は約4分で読めます。

VBAを使用して、Excelのシートに重複データが存在するか調べてみます。

VBAで重複データの確認

Sheet1のA列とB列にデータが入力されています。
A列は文字Eが重複していますが
B列に重複している文字は存在しません。

 

VBAで重複データがあるか確認するには
Dictionaryオブジェクトを使用します。

Dictionaryオブジェクトを使用するには
Microsoft Scripting Runtimeに参照設定を行う必要があります。
参照設定についてはこちらをご覧ください。

VBAで参照設定を行う
VBAに標準で含まれていない機能があるときは 外部のライブラリを参照して、外部ライブラリ内の機能を利用します。 この外部ライブラリの機能を利用する設定を、参照設定と言います。

 

重複データの存在を確認をするコードです。

データの最終行を取得するためにgetMaxRowを使用しています。

 

DictionaryのExistsメソッドとAddメソッドでcells(i, col).Valueと入力しています。
cells(i, col)とValueの入力を省略してしまうと
セルの値ではなくRangeオブジェクトが呼び出されます。
重複チェックが動かなくなってしまうので、必ずValueをつけてください

 

test_findDupulicatesを実行するとfindDuplicatesを呼び出して
A列とB列に重複データがあるか確認します。

 

Call findDupulicates(sht, 1)でA列に重複データがあるか確認しています。
文字Eが重複しているので、メッセージボックスに重複データが存在すると
表示されます。

 

Call findDupulicates(sht, 2)でB列に重複データがあるか確認しています。
重複している文字はないので、重複データなしと表示されます。

 

VBAで重複しているデータを取得

VBAでExcelのシートの重複データを取得するには、Dictionaryオブジェクトを使用します。

Dictionaryオブジェクトを使用するには
Microsoft Scripting Runtimeに参照設定を行う必要があります。

Sheet2のA列に都道府県を一部抜粋したデータを入力しました。

データが少ないので目視でも確認できますが、千葉県と奈良県が重複しています。
VBAを使用して重複データを取得します。

 

重複データを取得するコード

シートの特定の列から重複データを取得するコードです。

データの最終行を取得するためにgetMaxRowを使用しています。

listDupulicatesプロシージャーはシートオブジェクトと重複データが存在する列を指定すると
重複データをDictionaryオブジェクトとして返します。

 

test_listDuplicatesを動かすと、重複データをSheet2のB列に書き出します。

 

重複データを削除する

VBAを使用せず、手っ取り早くシートから重複データを削除したいときは
Excelのデータタブにある「重複の削除」を使用することをおすすめします。

VBAを使用する場合はRangeオブジェクトのRemoveDuplicates メソッドを使用します。

Sheet2に都道府県のデータを入力しましたが、千葉県と奈良県が重複しています。
重複している千葉県と奈良県のデータを削除します。

シートから重複データを削除するコードです。

データの最終行を取得するためにgetMaxRowを使用しています。

 

deleteDuplicatesを実行すると、重複している千葉県と奈良県のデータが削除されます。

コメント