VBAで配列から重複している要素を削除するにはDictionaryオブジェクト
を使用します。
Dictionary オブジェクト | Microsoft Learn
Dictionary
を使用するためにはMicrosoft Scripting Runtimeに参照設定を行う必要があります。
参照設定の方法についてはこちらをご覧ください。
VBAで参照設定を行う
·1 分
Programming
VBA
配列から重複を削除するコードは以下になります。
Function DeleteDuplicateItem(ary() As Variant) As Variant()
'###################################################################################
'配列から重複している要素を削除する
'Dictionaryを使用するので、Microsoft Scripting Runtimeの参照設定が必要
'-----------------------------------------------------------------------------------
'引数 :ary 重複を削除したい配列
'###################################################################################
Dim dic As 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</pre>
For i = 0 To UBound(ary)
If dic.Exists(ary(i)) = False Then
dic.Add ary(i), ary(i)
End If
Next i</pre>
配列の要素をDictionary
に格納します。
Existsメソッドを使用し、格納されてない配列要素だけをDictionary
に格納します。
DeleteDuplicateItem = dic.Keys
dic.keys
で重複した要素を排除した配列を返します
TestDeleteDuplicateItem
でDeleteDuplicateItem
のテストをしてみます。
配列ary
の”テスト1″という項目が重複しています。
Sub TestDeleteDuplicateItem()
Dim ary(3) As Variant
ary(0) = "テスト1"
ary(1) = "テスト2"
ary(2) = "テスト1"
ary(3) = "テスト3"
Dim ary2() As Variant
ary2 = DeleteDuplicateItem(ary)
Dim i As Long
Dim s As String
s = ""
For i = 0 To UBound(ary2)
s = s & ary2(i) & vbNewLine
Next i
MsgBox s
End Sub
コードを動かすと配列の重複要素を削除した内容をメッセージボックスに表示します。
