和風スパゲティのレシピ

日本語でコーディングするExcelVBA

配列から重複を削除する - Unique/Dictionary

一次元配列から重複を削除する方法を解説します。

Excel365、Excel2021以降のバージョンであれば、
WorksheetFunction.Uniqueを使用するのが簡単です。


旧バージョンとの互換性やその他カスタマイズを行いたい場合は、
Dictionaryオブジェクトを使用して重複を削除します。

WorksheetFunction.Unique

サンプルコード

Dim Arr元配列 As Variant
Arr元配列 = Array("みかん", "りんご", "いちご", "みかん", "りんご")

' UNIQUE関数を使って重複を削除した配列を生成
Dim Arrユニーク化配列 As Variant
Arrユニーク化配列 = WorksheetFunction.Unique(Arr元配列, True)
' ↑ 「みかん,りんご,いちご」3要素の配列が生成されます。

解説

UNIQUE関数に一次元配列を渡すことで、
配列から重複を削除した配列を生成することが出来ます。


一次元配列はExcelで言うところの「横方向の配列」、
つまり「1行n列の配列(セル範囲)」として扱われます。

よってUNIQUE関数の第2引数は省略することはできず、
Trueを指定しなければいけない点にご注意ください。

Dictionary

サンプルコード

Dim Arr元配列 As Variant
Arr元配列 = Array("みかん", "りんご", "いちご", "みかん", "りんご")

' ユニーク化用のDictioanry
Dim Dicユニーク化 As New Dictionary

' 配列の全要素をループ
Dim key商品
For Each key商品 In Arr元配列
    
    ' 新出の要素をDictionaryへ格納
    If Dicユニーク化.Exists(key商品) = False Then
        Dicユニーク化.Add key商品, ""
    End If
    
Next

' DictionaryのKeyを配列に変換
Dim Arrユニーク化配列 As Variant
Arrユニーク化配列 = Dicユニーク化.Keys
' ↑ 「みかん,りんご,いちご」3要素の配列が生成されます。

解説

DictionaryにはKeyの存在判定を簡単に行うことが出来る、
Existsメソッドが実装されています。

これとAddメソッドを組み合わせることで、
「Keyが存在しないならAddで新規追加」
というコードが簡単に書けますので、これで重複の無いKeyのリストを作成できます。


さらにDictionaryには「Keyのリストを配列に変換」してくれる、
Keysメソッドが実装されています。

ユニーク化が完了すれば、Dictionary.Keysで一発で配列に変換可能です。