キーとアイテムをペアで管理する配列を連想配列と言う。
Dictionary オブジェクトの使い方
Dictionary オブジェクトのインスタンスを生成する
CreateObject 関数を使って Dictionary オブジェクトのインスタンスを生成する。
Dim dict Set dict = CreateObject("Scripting.Dictionary")
指定したキーが存在するか確かめる
Dictionary オブジェクトに指定したキーが存在するか確かめるには、Exists メソッドを使う。
存在すれば True を、存在しなければ False を返す。
If dict.Exists("VB") Then MsgBox "キー ""VB"" はすでに存在します。" End If
キーとアイテムを追加する
キーとアイテムを追加するには Add メソッドを使う。
dict.Add "VBS", "VBScript"すでに存在するキーを指定すると実行時エラーが起きる。
「エラー番号 457 : このキーは既にコレクション内の要素に関連付けられています。」
Item プロパティを使う方法もある。
Add メソッドと異なり、こちらはすでに存在するキーを指定してもエラーにならない。
存在するキーを指定した場合、そのキーに該当するアイテムが書き換えられる。
dict.Item("VBS") = "VBScript" ' → キー "VBS" 、アイテム "VBScript" のペアが追加される dict.Item("VBS") = "Visual Basic Scripting Edition" ' → キー "VBS" のアイテムが "Visual Basic Scripting Edition" になる
指定したキーに該当する、キーとアイテムのペアを削除する
特定のキーで、キーとアイテムのペアを削除するには Remove メソッドを使う。
dict.Remove "VBS"指定したキーが存在しない場合は、実行時エラーが起きる。
「エラー番号 32811: 要素が見つかりません。」
すべてのキーとアイテムのペアを削除する
すべてのキーとアイテムのペアを削除するには RemoveAll メソッドを使う。
dict.RemoveAllすべてのキーの配列を取得する
すべてのキーの配列を取得するには Keys メソッドを使う。
Dim keys keys = dict.Keys Dim i For i = LBound(keys) To UBound(keys) WScript.Echo keys(i) Next
すべてのアイテムの配列を取得する
すべてのアイテムの配列を取得するには Items メソッドを使う。
Dim items items = dict.Items Dim i For i = LBound(items) To UBound(items) WScript.Echo items(i) Next
Dictionary オブジェクト内のキーとアイテムのペアの数を取得する
Dictionary オブジェクト内のキーとアイテムのペアの数を取得するには Count プロパティを使う。
MsgBox dict.Countキーを変更する
キーを変更するには Key プロパティを使う。
dict.Key("VBS") = "VBSCRIPT"サンプルスクリプト
Option Explicit 'Dictionaryオブジェクトを生成 Dim dict Set dict = CreateObject("Scripting.Dictionary") 'キー/アイテムのペアを追加 dict.Add "VB", "Visual Basic" dict.Add "VBA", "Visual Basic for Applications" dict.Add "VBS", "VBScript" 'Dictionaryオブジェクト内に存在するキー/アイテムのペアの数を表示 MsgBox "ペアの数: " & dict.Count '指定したキーがDictionaryオブジェクト内に存在するかどうか If dict.Exists("VB") Then MsgBox "キー ""VB"" はすでに存在します。" End If 'すべてのアイテムの配列を取得 Dim items items = dict.Items Dim i For i = LBound(items) To UBound(items) MsgBox "Item(" & i & "): " & items(i) Next 'すべてのキーの配列を取得 Dim keys keys = dict.Keys Dim k For k = LBound(keys) To UBound(keys) MsgBox "Key(" & k & "): " & keys(k) Next '指定したキーとアイテムのペアを消す dict.Remove "VBA" '存在しないキーを指定した場合は実行時エラーが起きる ' →エラー番号 32811: 要素が見つかりません。 On Error Resume Next dict.Remove "VBA" If Err.Number <> 0 Then MsgBox Err.Number & ": " & Err.Description End If On Error GoTo 0 'すべてのキーとアイテムのペアを消す dict.RemoveAll 'アイテムを設定 dict.Item("QB") = "QuickBASIC" MsgBox dict.Item("QB") 'キーを変更 dict.Key("QB") = "BASIC" If Not dict.Exists("QB") And dict.Exists("BASIC") Then MsgBox "キーを書き換え ""QB"" → ""BASIC""" End If 'アイテムを変更 dict.Item("BASIC") = "N88-BASIC" MsgBox dict.Item("BASIC")
配列の代わりにもなる
VBScript の配列の代わりに Dictionary オブジェクトを使っても良い。
データを追加するとき、キーに Dictionary オブジェクトの Count プロパティを指定して、アイテムには任意のデータを指定する。
それだけで OK 。
データの追加時に動的配列のようにいちいち ReDim Preserve で拡張する手間がない。
アクセスするときは配列と同じように dict.Item(i) でいい。
Dictionary オブジェクトの方が楽。
'キー/アイテムのペアを追加 dict.Add dict.Count, "Visual Basic" 'インデックス 0 に追加 dict.Add dict.Count, "Visual Basic for Applications" 'インデックス 1 に追加 dict.Add dict.Count, "VBScript" 'インデックス 2 に追加 'アイテムを表示 Dim i For i = 0 To dict.Count - 1 WScript.Echo dict(i) Next