使用方法
ディクショナリオブジェクトを使用するには、 CreateObject 関数を使用してディクショナリオブジェクトを生成します。この際、引数に”Scripting.Dictionary”を指定します。
ディクショナリオブジェクトを生成すると、Add メソッドでキー項目とその値を登録したり、Item プロパティで値を取得することができるようになります。
使用例
社員番号照会ツール
キー項目として社員名、対応する値として社員番号をディクショナリオブジェクトに登録し、その内容をインプットボックスから照会する例です。社員名から社員番号を表示したり、登録済み社員名の一覧を表示することができます。
Sub sample_dc012_01()
Dim dco As Object
Dim varList As Variant
Dim strName As String
'ディクショナリオブジェクトの生成
Set dco = CreateObject("Scripting.Dictionary")
'ディクショナリオブジェクトへ値の登録
With dco
.Add "田中 一郎", 1001
.Add "鈴木 次男", 1002
.Add "山田 サンタローズ", 1003
End With
'インプットボックスのキャンセルが押されるまで照会処理を繰り返します。
Do While (True)
strName = InputBox("社員名を入力してください。" & vbLf & _
"※ALL を入力すると登録済社員名の一覧を表示します。", _
"◆◆◆ 社員番号照会 ◆◆◆")
If StrPtr(strName) = 0 Then
'キャンセルボタンか、×ボタンが押されたら終了
Exit Do
ElseIf strName = "" Then
MsgBox "社員名が入力されていません。", vbExclamation
ElseIf strName = "ALL" Then
'社員名の一覧を取得
varList = dco.Keys
'社員名の配列をvbLfで結合して表示
MsgBox "登録済社員は以下の" & dco.Count & "名です。" & _
vbLf & vbLf & Join(varList, vbLf), vbInformation
ElseIf dco.Exists(strName) Then
'登録済社員の社員番号を表示
MsgBox "『" & strName & "』さんの社員番号は『" & _
dco.Item(strName) & "』です。", vbInformation
Else
'登録されていない場合はエラーを表示
MsgBox "『" & strName & "』さんは登録されていません。", _
vbExclamation
End If
Loop
'オブジェクトの破棄
Set dco = Nothing
End Sub
Setステートメント
Do…Loop
Withステートメント
InputBox関数
MsgBox関数
Join関数
上記サンプルマクロを実行するとインプットボックスが表示されます。
まずは、登録されていない社員名を適当に入力してみます。
登録されていない旨のエラーメッセージが表示されました。
次に登録済みの社員名を入力してみます。
社員名に対応する社員番号が正しく表示されました。
次は”ALL”と入力してみます。
登録済みの社員名がすべて表示されました。
照会処理を終了するには、キャンセルボタン を押下します。
オブジェクトライブラリへの参照設定
ディクショナリオブジェクトはVBAに組み込まれているオブジェクトではなく外部のオブジェクトライブラリ(scrrun.dll)により提供されています。参照設定とはこの外部ライブラリとして提供されるオブジェクトを使用する場合に、事前にその外部ライブラリへの参照を設定しておくことを言います。
このオブジェクトライブラリにはディクショナリオブジェクト以外にもファイルシステムオブジェクト
が含まれており、参照設定の方法とそのメリットについてはファイルシステムオブジェクトと全く同じです。
参照設定についての解説はファイルシステムオブジェクトのカテゴリ内で解説していますので、以下のリンク先よりご覧になってください。