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】
コメント