Excel

【Excel】VBAマクロで重複を削除した配列(一次元や二次元)の作り方【UniqueCollection, Dictionary】

当サイトでは記事内に広告を含みます。

この記事では、ExcelのVBAマクロを使用して一次元や二次元の配列から重複を削除する方法について解説していきます。

ポイントとしては`Collection`および`Dictionary`オブジェクトを使用することです。なお、マクロ初心者でもわかりやすいように変数名をaaaaa変数aaaaaといった名称にしています。

そのため、あなた自身がご活用の際には、ここを適切な(英語表記でしっくりくるものが一般的)ものに変更してご活用くださいね。

それでは詳しく見ていきましょう!

 

VBAマクロで重複を削除した配列(一次元)の作成方法

それではまず、一次元配列の重複削除について解説していきます。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。

Sub RemoveDuplicates1D()
    Dim aaaaaOriginalArrayaaaaa As Variant
    Dim aaaaaNoDupesCollectionaaaaa As Collection
    Dim aaaaaIndexaaaaa As Long
    Dim aaaaaItemaaaaa As Variant

    ' 重複を削除したいデータ
    aaaaaOriginalArrayaaaaa = Array("マントヒヒ", "ゴリラ", "さくらもち", "アイス", "ココア", "マントヒヒ")

    Set aaaaaNoDupesCollectionaaaaa = New Collection
    
    On Error Resume Next ' 重複エラーを無視
    For Each aaaaaItemaaaaa In aaaaaOriginalArrayaaaaa
        ' Collectionに追加する際、キーとして項目自体を使用(重複時にエラー)
        aaaaaNoDupesCollectionaaaaa.Add aaaaaItemaaaaa, CStr(aaaaaItemaaaaa)
    Next aaaaaItemaaaaa
    On Error GoTo 0 ' エラーハンドリングを元に戻す

    ' 重複削除後のデータを出力
    For aaaaaIndexaaaaa = 1 To aaaaaNoDupesCollectionaaaaa.Count
        Debug.Print aaaaaNoDupesCollectionaaaaa(aaaaaIndexaaaaa)
    Next aaaaaIndexaaaaa
End Sub

 

コードのAlt+F8を押し、マクロ選択画面でRemoveDuplicates1D関数を実行します。

このコードでは、`Collection`オブジェクトを使用して一次元配列から重複を削除します。

`On Error Resume Next`を使用して重複時に発生するエラーを無視し、その各要素をCollectionに追加します。重複が削除された一次元配列を得ることができます。

 

VBAマクロで重複を削除した配列(2次元)の作成方法

続いては、二次元配列の重複削除について解説していきます。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。

Sub RemoveDuplicates2D()
    Dim aaaaaOriginalArrayaaaaa As Variant
    Dim aaaaaUniqueDictaaaaa As Object
    Dim aaaaaRowaaaaa As Long
    Dim aaaaaKeyaaaaa As String

    ' 重複を削除したいデータ(2次元配列)
    aaaaaOriginalArrayaaaaa = Array(Array("マントヒヒ", 1), Array("ゴリラ", 2), Array("さくらもち", 3), Array("アイス", 4),Array("ココア", 5), Array("マントヒヒ", 1))

    Set aaaaaUniqueDictaaaaa = CreateObject("Scripting.Dictionary")
    
    For aaaaaRowaaaaa = LBound(aaaaaOriginalArrayaaaaa) To UBound(aaaaaOriginalArrayaaaaa)
        ' 配列の各行を文字列に変換してキーとする
        aaaaaKeyaaaaa = Join(aaaaaOriginalArrayaaaaa(aaaaaRowaaaaa), "_")
        If Not aaaaaUniqueDictaaaaa.exists(aaaaaKeyaaaaa) Then
            aaaaaUniqueDictaaaaa.Add aaaaaKeyaaaaa, aaaaaOriginalArrayaaaaa(aaaaaRowaaaaa)
        End If
    Next aaaaaRowaaaaa
    
    ' 重複削除後のデータを出力
    For Each aaaaaKeyaaaaa In aaaaaUniqueDictaaaaa.Keys
        Debug.Print aaaaaKeyaaaaa; ": "; Join(aaaaaUniqueDictaaaaa(aaaaaKeyaaaaa), ", ")
    Next aaaaaKeyaaaaa
End Sub

 

コードのAlt+F8を押し、マクロ選択画面でRemoveDuplicates2D関数を実行します。

このコードでは、`Dictionary`オブジェクトを使用して二次元配列から重複を削除しています。

二次元配列の各行を一意の文字列に変換し、それを`Dictionary`のキーとして使用します。これにより、重複する行が自動的に排除されます。

結果として、重複が削除された配列のデータを得ることができます。

まとめ VBAで重複を削除した配列・リスト(一次元や二次元)の作り方【UniqueCollection, Dictionary】

この記事では、VBAマクロで重複を削除した配列(一次元や二次元)の作り方【UniqueCollection, Dictionary】について解説しました。

VBAの扱いになれ、さらに快適な生活を送っていきましょう(^^)/