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

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

https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/dictionary-object

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

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で重複した要素を排除した配列を返します

TestDeleteDuplicateItemDeleteDuplicateItemのテストをしてみます。
配列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

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

Licensed under CC BY-NC-SA 4.0
最終更新 2018年7月20日 11:50
Hugo で構築されています。
テーマ StackJimmy によって設計されています。