Dictionary の Value に配列を格納する
通常の Dictionary は「キー → 値」のペアを管理しますが、値に 配列 を入れることもできます。これを使うと「顧客コード → 複数の購入商品」「カテゴリ → 複数の属性」など、1つのキーに複数データを紐づけられます。初心者向けに、コード例やテンプレートをかみ砕いて説明します。
基本の考え方
- Dictionaryの値に配列を入れる
dict("キー") = Array(...)のように格納。
- 取り出すときは配列として扱う
Dim arr As Variant: arr = dict("キー")- ループで要素を処理。
- 用途:
- 顧客ごとの購入商品一覧。
- 商品カテゴリごとの属性。
- 複数値をまとめて管理。
テンプレ1:キーに配列を格納して取り出す
Sub Dict_ValueArray_Basic()
Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
' 値に配列を格納
dict("A001") = Array("りんご", "みかん", "バナナ")
dict("A002") = Array("ぶどう", "もも")
' 取り出し
Dim arr As Variant, i As Long
arr = dict("A001")
For i = LBound(arr) To UBound(arr)
Debug.Print "A001の商品=" & arr(i)
Next i
End Sub
VB- 結果:
A001の商品=りんご A001の商品=みかん A001の商品=バナナ
テンプレ2:顧客ごとの購入商品リスト
Sub Dict_ValueArray_Customer()
Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
dict("顧客A") = Array("りんご", "みかん")
dict("顧客B") = Array("バナナ", "ぶどう", "もも")
Dim cust As Variant, arr As Variant, i As Long
For Each cust In dict.Keys
Debug.Print "顧客=" & cust
arr = dict(cust)
For i = LBound(arr) To UBound(arr)
Debug.Print " 商品=" & arr(i)
Next i
Next cust
End Sub
VB- 結果:
顧客=顧客A 商品=りんご 商品=みかん 顧客=顧客B 商品=バナナ 商品=ぶどう 商品=もも
テンプレ3:シートデータを読み込んで配列に格納
Sub Dict_ValueArray_FromSheet()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim rg As Range: Set rg = ws.Range("A2:C10") ' A=顧客, B=商品, C=数量
Dim v As Variant: v = rg.Value
Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
Dim r As Long, cust As String, prod As String
For r = 1 To UBound(v, 1)
cust = v(r, 1)
prod = v(r, 2) & "(" & v(r, 3) & ")" ' 商品(数量)
Dim arr As Variant
If dict.Exists(cust) Then
arr = dict(cust)
ReDim Preserve arr(LBound(arr) To UBound(arr) + 1)
arr(UBound(arr)) = prod
dict(cust) = arr
Else
dict(cust) = Array(prod)
End If
Next r
' 出力
Dim k As Variant, i As Long
For Each k In dict.Keys
Debug.Print "顧客=" & k
arr = dict(k)
For i = LBound(arr) To UBound(arr)
Debug.Print " 商品=" & arr(i)
Next i
Next k
End Sub
VB- ポイント:
- 顧客ごとに購入商品を配列にまとめる。
ReDim Preserveで配列を拡張。
テンプレ4:配列をJOINで文字列化して出力
Sub Dict_ValueArray_Join()
Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
dict("カテゴリA") = Array("赤", "青", "緑")
dict("カテゴリB") = Array("白", "黒")
Dim k As Variant
For Each k In dict.Keys
Debug.Print k & " → " & Join(dict(k), ", ")
Next k
End Sub
VB- 結果:
カテゴリA → 赤, 青, 緑 カテゴリB → 白, 黒
例題で練習
'例1:キーに配列を格納
Sub Example1()
Dict_ValueArray_Basic
End Sub
'例2:顧客ごとの購入商品リスト
Sub Example2()
Dict_ValueArray_Customer
End Sub
'例3:シートデータを配列に格納
Sub Example3()
Dict_ValueArray_FromSheet
End Sub
'例4:配列をJOINで文字列化
Sub Example4()
Dict_ValueArray_Join
End Sub
VB初心者向けポイント
- Dictionaryの値は配列もOK → 複数データをまとめて管理できる。
- ReDim Preserveで拡張 → 既存配列に新しい要素を追加可能。
- JOINで文字列化 → 配列を見やすく出力できる。
- 実務で便利 → 顧客ごとの購入商品、カテゴリごとの属性などを高速に管理。
👉 この「Valueに配列テンプレ」を覚えておけば、Dictionaryを使った 多値管理・顧客別商品リスト・カテゴリ別属性管理 をExcel VBAで簡単に実現できます。
