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

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

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

https://kazusa-pg.com/vba-references/

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

 1Function DeleteDuplicateItem(ary() As Variant) As Variant()
 2'###################################################################################
 3'配列から重複している要素を削除する
 4'Dictionaryを使用するので、Microsoft Scripting Runtimeの参照設定が必要
 5'-----------------------------------------------------------------------------------
 6'引数  :ary  重複を削除したい配列
 7'###################################################################################
 8
 9  Dim dic As New Dictionary
10  Dim i As Long
11  
12  For i = 0 To UBound(ary)
13    If dic.Exists(ary(i)) = False Then
14      dic.Add ary(i), ary(i)
15    End If
16  Next i
17     
18  DeleteDuplicateItem = dic.Keys
19  
20  Set dic = Nothing
21  
22End Function</pre>
1For i = 0 To UBound(ary)
2  If dic.Exists(ary(i)) = False Then
3    dic.Add ary(i), ary(i)
4  End If
5Next i</pre>

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

1DeleteDuplicateItem = dic.Keys

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

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

 1Sub TestDeleteDuplicateItem()
 2
 3  Dim ary(3) As Variant
 4  ary(0) = "テスト1"
 5  ary(1) = "テスト2"
 6  ary(2) = "テスト1"
 7  ary(3) = "テスト3"
 8
 9  Dim ary2() As Variant
10  ary2 = DeleteDuplicateItem(ary)
11
12  Dim i As Long
13  Dim s As String
14  s = ""
15  For i = 0 To UBound(ary2)
16    s = s & ary2(i) & vbNewLine
17  Next i
18  MsgBox s
19
20End Sub

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

関連ページ