メインコンテンツへスキップ
VBAで配列から重複している要素を削除する

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

·2 分
Programming VBA
かずさプログラマー
著者
かずさプログラマー
業務の作業自動化を行っています。Go、VBA、Pythonを主に使用しています。過去にはC#、VB.Net、JavaScriptも使用していました。

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

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

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

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

関連記事

【VBA】重複データが存在するか確認する
·5 分
Programming VBA
【VBA】n日後の営業日を求める
·2 分
Programming VBA
VBAで休日・祝日を判定する
·5 分
Programming VBA