VBAオジサンのらくがき帳

VBAで重複する値を取り除く

2021-07-26 00:00:00

リストなどから重複する値を取り除く方法を紹介します。Collectionを使う方法やDictionaryを使う方法が一般的に使われます。シート上にある場合には、RangeオブジェクトのRemoveDuplicatesメソッドが使用するとよいケースもあると思います。

Collectionを用いた実装

Dim orig As Variant
Dim unq As Collection
Dim v As Variant

orig = Array(1, 2, 2, 4, 5, 5, 7, 8)
Set unq = New Collection
For Each v In orig
    On Error Resume Next
    unq.Add v, CStr(v)
    On Error GoTo 0
Next

For Each v In unq
    Debug.Print v
Next

Dictionaryを用いた実装

Dim orig As Variant
Dim unq As Object
Dim v As Variant

orig = Array(1, 2, 2, 4, 5, 5, 7, 8)
Set unq = CreateObject("Scripting.Dictionary")
For Each v In orig
    If Not unq.Exists(v) Then
        unq.Add v, 1
    End If
Next

For Each v In unq.keys()
    Debug.Print v
Next

Dictionaryを事前バインディングで使うときには「Microsoft Scripting Runtime」への参照設定が必要です。