Pythonではよく使う辞書と同じようなものを、ExcelのVBAでも使えるようなので、その使い方を調べたので備忘に残しておきます。
バインディング、オブジェクトの生成
事前バインディング(参照設定する)
VBAのコードの画面で「ツール」⇒「参照設定」から
「Microsoft Scripting Runtime」にチェックをつける。
この設定をしたうえで、コードでは以下の通りオブジェクトを生成する。
'事前バインディング
Dim newDic As New Scripting.Dictionary
遅延バインディング(参照設定しない)
事前の参照設定せずに、遅延バインディングで実行する場合は、CreateObjectで”Scripting.Dictionary”で指定する。
'遅延バインディング
Dim newDic As Object
Set newDic = CreateObject(“Scripting.Dictionary”)
辞書にkeyとvalueを追加する。
Addメソッドで追加できる。
newDic.Add "Taro", 168
newDic.Add "Kazuo", 175
ワークシートの範囲を辞書に追加する。格納データは、ActiveSheetの2行目からで2列目(B列)がKey、3列目(C列)がValueのケース。
Dim StartRow As Long
Dim KeyCol As Long
StartRow = 2
KeyCol = 2
Dim Ws As Worksheet
Set Ws = ActiveSheet
Dim r As Long
For r = StartRow To Ws.Cells(Rows.Count, StartRow).End(xlUp).Row
newDic.Add Ws.Cells(r, KeyCol).Value, Ws.Cells(r, KeyCol + 1).Value
Next
keyとValueを取り出す
「For Each xx in 辞書配列」でKeyをforで回せる。
ItemメソッドでValueを取り出せる。。
Dim dkey
For Each dkey In newDic
Debug.Print dkey & ":" & newDic.Item(dkey)
Next
Keyの存在の確認、Valueの上書き
Keyが存在するかは「Exists」メソッドで調べられる。
Valueを上書きする場合は、「Item」メソッドを使い代入する。
ワークシート上のデータを辞書配列に格納するものを、Key存在を確認し、Keyがある場合はValueを上書きする。
Dim Ws As Worksheet
Set Ws = ActiveSheet
Dim r As Long
Dim tempKey
For r = StartRow To Ws.Cells(Rows.Count, StartRow).End(xlUp).Row
tempKey = Ws.Cells(r, KeyCol).Value
If newDic.Exists(tempKey) Then
'Valueを上書きする。
newDic.Item(tempKey) = Ws.Cells(r, KeyCol + 1).Value
Else
newDic.Add tempKey, Ws.Cells(r, KeyCol + 1).Value
End If
Next
Dim dkey
For Each dkey In newDic
Debug.Print dkey & ":" & newDic.Item(dkey)
Next
以上、Pythonの辞書と同じようなことが、ExcelのVBAにおいても、できることが分かりました。

Excelマクロで配列にワークシートのデータを格納する|ふーた
VBAで配列にワークシート上のデータを格納する方法です。 1次元の配列に格納する。 アクティブなワークシートのB2セルからC4セルの範囲を1次元の配列に格納するコードです。 この場合は、配列の最初の項目は「testArray(0)」と、0 から始まることになります。 Sub List_Test1()
Dim ...
コメント