
VBAのDictionaryオブジェクトとは?基本的な使い方を具体例とともに解説
VBAでは、データを格納する時に配列をよく使用します。
Dictionaryオブジェクトは、データベースのようにキーワードからデータを取得することができます。
目次
1.Dictionary オブジェクトについて
1-1.Dictionary オブジェクトとは
Dictionary(辞書)の名の通り、Key(キーワード)とItem(データ)で構成されています。Keyは重複することはできません。Keyを指定することで、Itemを取得できます。
1-2.Runtimeを使用する際の設定
Runtimeを使う場合は、事前に設定が必要です。
1-2-1.設定方法
メニューの[ツール]→[参照設定]を選択
参照可能なライブラリファイルから「Microsoft Scripting Runtime」にチェックを入れて「OK」をクリックします。
1-3.Dictionary オブジェクトの構文
Dictionaryオブジェクトには、Runtimeを使う方法と使わない方法があります。使う場合と使わない場合で、記述方法が異なる場合があるので、注意が必要です。
1-3-1.Runtimeを使う場合
1-3-1-1.連想配列の定義方法
'連想配列をObject型で定義、 Dim [連想配列名] As Dictionary '定義した連想配列にDirectoryインスタンスを指定 Set [連想配列名] = New Dictionary '連想配列に、値を追加 [連想配列名].Add [Key], [Item]
1-3-1-2.連想配列への追加と取得方法
Sub sample01()
Dim test As Dictionary
Set test = New Scripting.Dictionary
'連想配列に、値を追加
test.Add "001", "1000"
test.Add "002", "2200"
test.Add "003", "3330"
'連想配列からキー値が「001」のアイテム値を取得(1つ目のデータを取得)
MsgBox "001" & ":" & test.Item("001")
End Sub実行結果:
1-3-2.Runtimeを使わない場合
1-3-2-1.連想配列の定義方法
'連想配列をObject型で定義
Dim [連想配列名] as Object
'定義した連想配列にDirectoryオブジェクトへの参照を作成
Set [連想配列名] = CreateObject("Scripting.Dictionary")
'連想配列に、値を追加
[連想配列名].Add [Key], [Item]1-3-2-2.連想配列への追加と取得方法
Sub sample02()
Dim test As Dictionary
Set test = New Scripting.Dictionary
test.Add "001", "1000"
test.Add "002", "2200"
test.Add "003", "3330"
'連想配列から値を取得(1つ目のデータを取得)
MsgBox test.Keys(0) & ":" & test.Items(0)
End Sub実行結果:
2.特殊な使い方
2-1.重複するKeyを取り込まない
Dictionaryオブジェクトは、重複したKeyを追加しようとするとエラーになってしまいます。そのため、下記のようにKeyがすでに追加されているかをチェックした方が安全です。
Sub sample03()
Dim test As Object
Set test = CreateObject("Scripting.Dictionary")
test.Add "001", "1000"
test.Add "002", "2200"
test.Add "003", "3330"
'追加したい値
Dim addKey As String
Dim addItem As String
addKey = "004"
addItem = "4444"
For i = 0 To test.Count - 1
'追加するKey値が、既に連想配列に存在するかチェック
If Not test.Exists(addKey) Then
'存在しないなら追加
test.Add addKey, addItem
Exit For
End If
Next i
End Sub2-2.設定したデータを削除する
設定したデータを削除する場合は、以下のように行います
2-2-1.データを指定して削除
Sub sample04()
Dim test As Dictionary
Set test = New Scripting.Dictionary
test.Add "001", "1000"
test.Add "002", "2200"
test.Add "003", "3330"
'削除前の配列を表示
wk = "削除前の配列(件数:" & test.Count & ")" & vbCrLf
For i = 0 To test.Count - 1
wk = wk & test.Keys(i) & ":" & test.Items(i) & vbCrLf
Next i
MsgBox wk
'「002」のデータを削除
test.Remove "002"
'削除前の配列を表示
wk = "削除前の配列(件数:" & test.Count & ")" & vbCrLf
For i = 0 To test.Count - 1
wk = wk & test.Keys(i) & ":" & test.Items(i) & vbCrLf
Next i
MsgBox wk
End Sub
実行前:
実行結果:
2-2-2.全データを削除
Sub sample05()
Dim test As Dictionary
Set test = New Scripting.Dictionary
test.Add "001", "1000"
test.Add "002", "2200"
test.Add "003", "3330"
'削除前の配列を表示
wk = "削除前の配列(件数:" & test.Count & ")" & vbCrLf
For i = 0 To test.Count - 1
wk = wk & test.Keys(i) & ":" & test.Items(i) & vbCrLf
Next i
MsgBox wk
'「002」のデータを削除
test.RemoveAll
'削除後の配列を表示
wk = "削除後の配列(件数:" & test.Count & ")" & vbCrLf
For i = 0 To test.Count - 1
wk = wk & test.Keys(i) & ":" & test.Items(i) & vbCrLf
Next i
MsgBox wk
End Sub
実行前:
実行結果:
3.その他の使用例
3-1.連想配列に追加するデータを、Excelのセルから取得
追加するデータは、下記のようなExcel表から取得することもできます。
| キー | アイテム |
| お茶 | 120 |
| 紅茶 | 150 |
| コーヒー | 200 |
| 水 | 100 |
Sub sample06()
Dim test As Dictionary
Set test = New Scripting.Dictionary
With Worksheets("データ") '「データ」シート内での作業
For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
test.Add .Cells(i, 1).Value, .Cells(i, 2).Value
Next i
End With
'配列を表示
wk = "配列(件数:" & test.Count & ")" & vbCrLf
For i = 0 To test.Count - 1
wk = wk & test.Keys(i) & ":" & test.Items(i) & vbCrLf
Next i
MsgBox wk
End Sub
実行結果:
4.最後に
Dictionaryオブジェクトには、上記以外の使い方もあります。通常の配列と使い分けてみてください。



![メニューの[ツール]→[参照設定]を選択](https://www.bold.ne.jp/engineer-club/wp-content/uploads/2023/08/メニューのツール→参照設定を選択.png)









コメント