2011年8月21日日曜日

多次元のScripting.Dictionary構造

Sub testData()
    Dim shops As New Scripting.Dictionary
    
    '店を三軒追加します
    shops.Add "東京本店", New Scripting.Dictionary
    shops.Add "小金井店", New Scripting.Dictionary
    shops.Add "新宿店", New Scripting.Dictionary
    
    '東京本店に商品コードPD001~003を追加、定義したclsProductを利用
    shops.Item("東京本店").Add "PD001", New clsProduct
    shops.Item("東京本店").Add "PD002", New clsProduct
    shops.Item("東京本店").Add "PD003", New clsProduct
    
    'PD001~003の商品詳細を定義
    shops.Item("東京本店").Item("PD001").Name = "北海度牛乳"
    shops.Item("東京本店").Item("PD001").Price = 165
    shops.Item("東京本店").Item("PD001").Desc = "北海道のおいしい原乳"
    
    shops.Item("東京本店").Item("PD002").Name = "刺身の盛り合わせ"
    shops.Item("東京本店").Item("PD002").Price = 1200
    shops.Item("東京本店").Item("PD002").Desc = "新鮮だ新鮮だ"
    
    shops.Item("東京本店").Item("PD003").Name = "ハンドソープ"
    shops.Item("東京本店").Item("PD003").Price = 350
    shops.Item("東京本店").Item("PD003").Desc = "綺麗な手"
    
    '小金井店も同じ
    shops.Item("小金井店").Add "PD001", New clsProduct
    shops.Item("小金井店").Add "PD002", New clsProduct
    
    shops.Item("小金井店").Item("PD001").Name = "トーマス揺々セット"
    shops.Item("小金井店").Item("PD001").Price = 3200
    shops.Item("小金井店").Item("PD001").Desc = "子供大人気"
    
    shops.Item("小金井店").Item("PD002").Name = "果物ゼリ"
    shops.Item("小金井店").Item("PD002").Price = 200
    shops.Item("小金井店").Item("PD002").Desc = "りんご、ぶどう、いちご"
    
    Dim shop As Variant
    Dim product As Variant
    
    '全ての店から,店名を取得してループ
    For Each shop In shops.Keys
        'その店から,商品コードを取得してループ
        For Each product In shops.Item(shop).Keys
            '店名、商品コード、商品名、値段、改行、商品説明をコンソールに出力
            Debug.Print shop & " - (" & product & ")" & _
                        shops.Item(shop).Item(product).Name & " \ " & _
                        shops.Item(shop).Item(product).Price & vbNewLine & _
                        shops.Item(shop).Item(product).Desc
        Next
    Next
End Sub
こっちはclsProductの中身
Private mPdtName As String
Private mPdtPrice As Long
Private mPdtDesc As String

Public Property Let Name(ByVal newPdtName As String)
    mPdtName = newPdtName
End Property
Public Property Get Name() As String
    Name = mPdtName
End Property

Public Property Let Desc(ByVal newPdtDesc As String)
    mPdtDesc = newPdtDesc
End Property
Public Property Get Desc() As String
    Desc = mPdtDesc
End Property

Public Property Let Price(ByVal newPdtPrice As Long)
    mPdtPrice = newPdtPrice
End Property
Public Property Get Price() As Long
    Price = mPdtPrice
End Property

イミディエイトの出力はこんな感じ、新宿店は商品一つも登録しなかったので、
表示されませんでした。

東京本店 - (PD001)北海度牛乳 \ 165
北海道のおいしい原乳
東京本店 - (PD002)刺身の盛り合わせ \ 1200
新鮮だ新鮮だ
東京本店 - (PD003)ハンドソープ \ 350
綺麗な手
小金井店 - (PD001)トーマス揺々セット \ 3200
子供大人気
小金井店 - (PD002)果物ゼリ \ 200
りんご、ぶどう、いちご


データ構造はこうなっています

0 件のコメント:

コメントを投稿