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にデータ(キーとアイテム)を登録するサンプルです。
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
コメント