【ExcelVBA】連想配列[Dictionary]の使い方


この記事はプロモーションを含みます。

ExcelVBA

Excel VBAにおける連想配列「Dictionary(辞書)」の使い方を解説します。

Dictionary[連想配列]とは

連想配列とは、下記のようにある値(key)に別の値(item)を紐づけた配列になります。
 連想配列(0)[key:りんご][item:100円]
 連想配列(1)[key:みかん][item:80円]
 連想配列(2)[key:メロン][item:300円]

配列を使用する際は、下記のように[key]を呼び出すことで[item]を取得することが可能です。
 連想配列(りんご) → 100円

宣言

Excel VBAで、Dictionaryを使用するには、宣言を行う必要があります。

宣言を行う方法は、下記の2つがあります。
ここでは、それぞれの宣言方法を説明しますので、どちらか使いやすい方法を使って下さい。

1.CreateObjectを使用する
2.参照設定を使用する

CreateObjectを使用する

ここでは、CreateObject を使用して、Dictionaryを使用するための宣言を行います。
下記のサンプルでは、Dictionaryの変数名を「dic」として宣言しています。

Dim dic
Set dic = CreateObject("Scripting.Dictionary")

参照設定を使用する

参照設定を行う方法は以下の記事を参考にして下さい。
使用するライブラリファイルは「Microsoft Scripting Runtime」です。

Dictionaryの使い方

ここでは、Dictionaryにおける各機能の使用方法について説明します。
サンプルとして記載しているソースコードの宣言については、CreateObjectを使用する方式で記載しています。

データ(キー,アイテム)を登録する

Dictionaryにデータ(キーとアイテム)を登録するサンプルです。

Dictionaryに登録する「キー」は、同じ値を登録することは出来ません。
「アイテム」については、同じ値でも問題ありません。

Sub Sample()

    Dim dic
    Set dic = CreateObject("Scripting.Dictionary")
    
    dic.Add "りんご", "100円"
    dic.Add "みかん", "100円"
    dic.Add "メロン", "300円"
    
End Sub

上記のサンプルのようにデータを登録した場合、Dictionaryの中は下記のようになっています。

キーアイテム
りんご100円
みかん100円
メロン300円

データを参照する

Dictionaryに登録したデータを参照する方法は様々なものがありますが、ここでは最もシンプルな方法である参照したい「キー」を渡し、渡したキーに対応する「アイテム」を取得する方法を説明します。
以下がサンプルのソースコードになります。

Sub Sample()

    Dim dic
    Set dic = CreateObject("Scripting.Dictionary")
    
    dic.Add "りんご", "100円"
    dic.Add "みかん", "100円"
    dic.Add "メロン", "300円"
    
    Debug.Print (dic("みかん"))
    
End Sub

こちらを実行すると、渡したキーである「みかん」に対応したアイテム「100円」が取得されます。

データを変更する

Dictionaryに登録しているデータを変更する方法の説明です。

キーの値を変更する

キーの値を変更するサンプルのソースコードになります。

Sub Sample()

    ' 宣言
    Dim dic As Object, key As Variant
    Set dic = CreateObject("Scripting.Dictionary")
    
    ' キーとアイテムを登録する
    dic.Add "りんご", "100円"
    dic.Add "みかん", "100円"
    dic.Add "メロン", "300円"
    
    Debug.Print ("キーを変更する前の値を確認")
    For Each key In dic
        ' キーの内容を確認
        Debug.Print (key)
    Next
    
    ' キーの値を変更
    dic.key("りんご") = "ぶどう"
    
    Debug.Print ("キーを変更した後の値を確認")
    For Each key In dic
        ' キーの内容を確認
        Debug.Print (key)
    Next
    
End Sub

こちらのサンプルを実行すると、イミディエイトウィンドウに以下が表示されます。
キーの値が「りんご」から「ぶどう」に変更されたことが確認出来ます。

キーを変更する前の値を確認
りんご
みかん
メロン
キーを変更した後の値を確認
ぶどう
みかん
メロン

アイテムの値を変更する

アイテムの値を変更するサンプルのソースコードになります。

Sub Sample()

    ' 宣言
    Dim dic As Object, key As Variant
    Set dic = CreateObject("Scripting.Dictionary")
    
    ' キーとアイテムを登録する
    dic.Add "りんご", "100円"
    dic.Add "みかん", "100円"
    dic.Add "メロン", "300円"
    
    Debug.Print ("アイテムを変更する前の値を確認")
    For Each key In dic
        ' アイテムの内容を確認
        Debug.Print (dic(key))
    Next
    
    ' アイテムの値を変更
    dic("りんご") = "500円"
    
    Debug.Print ("アイテムを変更した後の値を確認")
    For Each key In dic
        ' アイテムの内容を確認
        Debug.Print (dic(key))
    Next
    
End Sub

こちらのサンプルを実行すると、イミディエイトウィンドウに以下が表示されます。
キー「りんご」に紐づくアイテム「100円」が「500円」に変更されたことが確認出来ます。

アイテムを変更する前の値を確認
100円
100円
300円
アイテムを変更した後の値を確認
500円
100円
300円

特定のデータを削除する

Dictionaryに登録しているデータを削除する方法の説明です。
以下がサンプルのソースコードになります。
サンプルでは、キーを元にデータの削除を行います。

Sub Sample()

    ' 宣言
    Dim dic As Object, key As Variant
    Set dic = CreateObject("Scripting.Dictionary")
    
    ' キーとアイテムを登録する
    dic.Add "りんご", "100円"
    dic.Add "みかん", "100円"
    dic.Add "メロン", "300円"
    
    Debug.Print ("削除する前の値を確認")
    For Each key In dic
        ' 連想配列の内容を確認
        Debug.Print (key & "," & dic(key))
    Next
    
    ' キーの削除
    dic.Remove "みかん"
    
    Debug.Print ("削除した後の値を確認")
    For Each key In dic
        ' 連想配列の内容を確認
        Debug.Print (key & "," & dic(key))
    Next
    
End Sub

以下がサンプルの実行結果です。
「みかん」が削除されたことが確認出来ました。

削除する前の値を確認
りんご,100円
みかん,100円
メロン,300円
削除した後の値を確認
りんご,100円
メロン,300円

全てデータを削除する

Dictionaryに登録しているデータを全て削除する方法の説明です。
以下がサンプルのソースコードになります。

Sub Sample()

    ' 宣言
    Dim dic As Object, key As Variant
    Set dic = CreateObject("Scripting.Dictionary")
    
    ' キーとアイテムを登録する
    dic.Add "りんご", "100円"
    dic.Add "みかん", "100円"
    dic.Add "メロン", "300円"
    
    Debug.Print ("削除する前の値を確認")
    For Each key In dic
        ' 連想配列の内容を確認
        Debug.Print (key & "," & dic(key))
    Next
    
    ' データを全て削除
    dic.RemoveAll
    
    Debug.Print ("削除した後の値を確認")
    For Each key In dic
        ' 連想配列の内容を確認
        Debug.Print (key & "," & dic(key))
    Next
    
End Sub

以下がサンプルの実行結果です。
削除した後の値が何も表示されず、全てのデータが削除されたことが確認出来ました。

削除する前の値を確認
りんご,100円
みかん,100円
メロン,300円
削除した後の値を確認

データの数を取得する

Dictionaryに登録しているデータを数を取得する方法の説明です。
以下がサンプルのソースコードになります。

Sub Sample()

    ' 宣言
    Dim dic As Object, key As Variant
    Set dic = CreateObject("Scripting.Dictionary")
    
    ' キーとアイテムを登録する
    dic.Add "りんご", "100円"
    dic.Add "みかん", "100円"
    dic.Add "メロン", "300円"
    
    ' データの数を取得
    Debug.Print (dic.Count)

End Sub

以下がサンプルの実行結果です。
「3」と表示され、データの数が正しく取得されたことが確認出来ました。

3

コメント

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