
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 Sub
2-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オブジェクトには、上記以外の使い方もあります。通常の配列と使い分けてみてください。
コメント