[[20110530155910]] 『Dictionaryについて』(まー) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『Dictionaryについて』(まー)
いつもお世話になっています。
Dictionaryについてなんですが、一つのkeyに対して、格納できる(Itemで取り出せる)のは一つだけでしょうか?

例えば、A列のIDをkeyにして、C列、F列、G列を格納し、インデックス番号みたいな感じで、key(1)はC列key(2)はF列という感じにはできますか?


 Item に配列を使用するとか?
 (seiya)

 seiyaさんから回答に補足。
 1つは留意点。1つは、Dictionaryに格納した配列のセルへの転記。

 ・留意点
   たとえばDIctionaryのデータ(Item)に3列の要素を持った配列をセットしたとする。
   その配列内の要素を★1のようにしても、実際には反映されない。
   プロシジャ引数のbyValのような扱いになる。要素の変更は★2のように、Itemをいったん
   取り出し、取り出した配列で変更を加えて戻してやる必要がある。

 Sub Sample1()
    Dim dic As Object
    Dim v As Variant

    Set dic = CreateObject("Scripting.Dictionary")

    dic("A") = Array("X", "Y", "Z")

    MsgBox dic("A")(0)
    MsgBox dic("A")(1)
    MsgBox dic("A")(2)

    dic("A")(1) = "V"   '★1
    MsgBox dic("A")(1)

    v = dic("A")        '★2
    v(1) = "V"          '★2
    dic("A") = v        '★2
    MsgBox dic("A")(1)

    Set dic = Nothing

 End Sub

 ・セルへの転記
  DictionaryのKeyもItemも、一次元配列なので、通常の配列のように、セル領域にまとめて
  転記することができる。ただし、上記のようにItemが1次元配列の場合、セル範囲(二次元領域)に落とし込む際は
  以下のようにTransposeを2回かける必要がある。

 Sub Sample2()
    Dim dic As Object

    Set dic = CreateObject("Scripting.Dictionary")

    dic("A") = Array("X1", "Y1", "Z1")
    dic("B") = Array("X2", "Y2", "Z2")
    dic("C") = Array("X3", "Y3", "Z3")
    dic("D") = Array("X4", "Y4", "Z4")

    Range("A1:C4").Value = WorksheetFunction.Transpose(WorksheetFunction.Transpose(dic.items))

    Set dic = Nothing

 End Sub

 ぶらっと立ち寄り

 DictionaryにDictionaryを格納したって良いんじゃよ
簡素過ぎたので追記:
要は何を入れるのかは作り手の自由なので、
「1つの値しか持てない〜」と思い込む必要はないですよ、
と言うアドバイスでした。
(ご近所PG)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.