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