辞書 Dictionary、Keys メソッドと Items メソッドを使用したループ処理
このコードは、VBA (Visual Basic for Applications) において Dictionary オブジェクトを使用し、Keys メソッドと Items メソッドを利用して辞書のキーと値をループ処理する方法を示しています。
' 辞書 Dictionary、Keys メソッドと Items メソッドを使用したループ処理
Private Sub Dictionary_ForEach_Keys_Items()
Dim members As Dictionary
Set members = New Dictionary
With members
.Add "m01", "Bob"
.Add "m02", "Tom"
.Add "m03", "Ivy"
Dim i As Long
Dim myItems As Variant
myItems = .Items
For i = LBound(myItems) To UBound(myItems)
Debug.Print i, myItems(i)
Next i
Dim myKeys As Variant
myKeys = .Keys
For i = LBound(myKeys) To UBound(myKeys)
Debug.Print i, myKeys(i), .Item(myKeys(i))
Next i
End With
End Sub1. 辞書 (Dictionary) の生成と初期化
Dim members As Dictionary
Set members = New Dictionary
- まず、
Dictionary型のオブジェクトmembersを作成し、新しいDictionaryをSetで初期化しています。Dictionaryはキーと値のペアを格納するコレクションです。
2. 辞書へのキーと値の追加
With members
.Add "m01", "Bob"
.Add "m02", "Tom"
.Add "m03", "Ivy"
Withステートメントを使って、members辞書にキー"m01","m02","m03"を追加し、それぞれに"Bob","Tom","Ivy"の値を設定しています。
3. Items メソッドによる値のループ処理
Dim i As Long
Dim myItems As Variant
myItems = .Items
For i = LBound(myItems) To UBound(myItems)
Debug.Print i, myItems(i)
Next i
.Itemsメソッドは、辞書内のすべての値を配列として返します。LBoundとUBoundを使用して、配列myItemsの最初の要素から最後の要素までループし、それぞれの値をDebug.Printで出力します。
4. Keys メソッドによるキーのループ処理とそのキーに対応する値の取得
Dim myKeys As Variant
myKeys = .Keys
For i = LBound(myKeys) To UBound(myKeys)
Debug.Print i, myKeys(i), .Item(myKeys(i))
Next i
.Keysメソッドは、辞書内のすべてのキーを配列として返します。LBoundとUBoundを使用して、配列myKeysの最初の要素から最後の要素までループします。- ループの中で、各キーとそのキーに対応する値を
Debug.Printで出力します。
具体的には、次のような出力がされます。
Debug.Print i, myKeys(i), .Item(myKeys(i))
この行では、i は配列内のインデックス番号、myKeys(i) はそのインデックスに対応するキー、.Item(myKeys(i)) はそのキーに対応する値を意味します。
全体の流れ
- 辞書の作成:
Dictionaryオブジェクトmembersを作成し、キーと値のペアを追加します。 - 値の取得 (
Items): 辞書内の全ての値を配列として取得し、その値をループして表示します。 - キーの取得 (
Keys): 辞書内の全てのキーを配列として取得し、そのキーと対応する値をループして表示します。
イミディエイトウィンドウ
0 Bob
1 Tom
2 Ivy
0 m01 Bob
1 m02 Tom
2 m03 Ivyまとめ
このコードは、Dictionary オブジェクトを利用して、キーと値のペアを管理し、それらをループ処理して出力する方法を示しています。Items メソッドと Keys メソッドを組み合わせて、辞書の中身を効率的に操作することができます。


