ExcelVBA

配列内の重複した要素を削除する【Dictionary】【ExcelVBA】

Dictionaryクラス(連想配列)を利用して、一次元配列の重複要素を削除する事が可能です。
Dictionaryは重複した値を格納する事が出来ません。その特性を活用します。

配列で条件に一致した要素を取得するサンプルコード

'■配列内の重複データを削除する
Sub sample_Array_Duplicate()
    Dim arr(3) As Variant
    Dim temp As Variant
    arr(0) = "ABC"
    arr(1) = "abc"
    arr(2) = "123"
    arr(3) = "123"
    
    '■重複を除く処理
    temp = Call_Array_Dictionary(arr)
    
    '■重複を除いたユニークな一覧を表示
    MsgBox Join(temp, vbCrLf)
    'ABC
    'abc
    '123
End Sub
’Dictionaryを使用する場合は、Microsoft Scripting Runtimeの参照設定が必要です
'■Dictionary(連想配列)で重複データを削除する
Public Function Call_Array_Dictionary(arr As Variant)
    Dim dic As New Dictionary
    Dim i As Long
    
    '■On Error Resume Nextでエラーを無視する
    On Error Resume Next
    For i = 0 To UBound(arr)
        dic.Add arr(i), arr(i)
    Next
    Call_Array_Dictionary = dic.Keys
    
End Function

その他

  • 重複した値を削除しユニークなリストとなりましたが、並び替えソート(昇順、降順)はされません。
    必要な場合、別途ソートする処理を入れましょう。
  • 一次元配列のみ対応で、二次元配列には対応していません。
  • Dictionaryクラスを使用するには「Microsoft Scripting Runtime」を参照設定しましょう。
    ※VBA画面のツールメニュー→参照設定→「Microsoft Scripting Runtime」にチェック

関連記事

配列の要素を結合する【Join関数】【ExcelVBA】
指定した要素で配列を作成【Array関数】【ExcelVBA】

コメント

タイトルとURLをコピーしました