VBAで配列から重複している要素を削除する

VBA

VBAで配列から重複している要素を削除するには
Dictionaryオブジェクトを使用します。

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

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

 

配列から重複を削除するコードは以下になります。

 

配列の要素をDictionaryオブジェクトに格納します。
Existsメソッドを使用し、格納されてない配列要素だけを
Dictionaryに格納します。

 

dic.keysで重複した要素を排除した配列を返します

 

TestDeleteDuplicateItemでDeleteDuplicateItemのテストをしてみます。
配列aryの”テスト1″という項目が重複しています。

 

コードを動かすと配列の重複要素を削除した内容をメッセージボックスに表示します。

コメント

  1. 吉川 真一 より:

    「deleteDuplicateItem」関数ですが無駄が多いと思います。多分以下のコードで問題ないと思いますがいかがでしょうか?

    Function deleteDuplicateItem(ary() As Variant) As Variant()
    ‘#####################################################################
    ‘配列から重複している要素を削除する
    ‘Dictionaryを使用するので、Microsoft Scripting Runtimeの参照設定が必要
    ‘———————————————————————
    ‘引数 :ary 重複を削除したい配列
    ‘#####################################################################

     Dim Dic As Dictionary
     Set Dic = New Dictionary
     
     Dim i As Long
     
     For i = 0 To UBound(ary)
      If Dic.Exists(ary(i)) = False Then
       Dic.Add ary(i), ary(i)
      End If
     Next i
      
     deleteDuplicateItem = Dic.Keys()
     
     Set Dic = Nothing
     
    End Function

    • 吉川 真一さん

      コメントありがとうございます。
      ご指摘のとおり、dictionaryのkeysで配列をそのまま返したほうが、すっきりしますね。
      参考にさせていただきます。