Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


33800 / 76734 ←次へ | 前へ→

【48150】Re:Scripting.Dictionaryで教えて下さい。
発言  neptune  - 07/4/5(木) 11:09 -

引用なし
パスワード
   kobasanさん、ichinose さん:
こんにちは

先ず、知らなかったことがあります。
これは私が、dictionaryをいわゆる辞書としてしか使ったことがない事が
原因で、配列をItemの要素として、格納できることを知りませんでした。
kobasanさんのご指摘で検証してみて納得しました。
Sub test2()
   Dim dic
   Dim I As Long
   Dim a(5) As Long, b(5) As Long, c(5) As Long
  
   Set dic = CreateObject("Scripting.Dictionary")

  For I = 0 To 4
    a(I) = I
    b(I) = I + 1
    c(I) = I + 2
  Next I
  
  dic(0) = a
  dic(1) = b
  dic(2) = c
  
  For I = 0 To 4
    Debug.Print "a=" & dic(0)(I) & " ; b=" & dic(1)(I) & " ; c=" & dic(2)(I)
  Next I
End Sub

>私は逆にCollectionでなければならない理由がしりたいですねえ!!
に付いては上記の「知らなかった」のが原因です。従って、このケースの
場合Collectionでなければならない事はありません。

collectionに関してですが、決定的な違いはdictionaryにはObjectへの参照を
格納できないと思っていたのですが、
ichinose さんの
>是非、ご意見を聞かせてください。
で、ざっと検証してみました。結果できるようですね。
'UserFormにTextBox,ListBox,ComboBoxを各1個ずつ配置
Sub test2()
  Dim dic
  Dim I As Long
  Dim a As Object
  Dim b As Object
  Dim c As Object
  
  Set dic = CreateObject("Scripting.Dictionary")
  
  Set a = UserForm1.TextBox1
  a.Text = "TextBox1Sample"
  
  Set b = UserForm1.ListBox1
  b.AddItem "ListBox1Sample"
  b.ListIndex = 0
  
  Set c = UserForm1.ComboBox1
  c.AddItem "ComboBox1Sample"
  c.ListIndex = 0
  
  Set dic(0) = a
  Set dic(1) = b
  Set dic(2) = c

  Debug.Print "a:" & dic(0).Text & " b:" & dic(1).Text & " c:" & dic(2).Text
End Sub

以上の結果を踏まえると、
「カスタム オブジェクト モデルを作成する場合、Collection オブジェクトを使用して
カスタム コレクションへの参照を保存することができますがDictionary オブジェクトではこの操作は行えません」
は手間がかかるので検証してませんが、ここまで可能ならカスタム オブジェクト ・・・
以外には「もっと決定的な利点」は知りません。

ただ、やはり、私はobjectにはcollection、辞書的機能にはdictionaryを使うと思います。
(なじみの問題とcollection、dictionaryと言う言葉がわかり易いからですが^ ^;)
今思ったんですが、Classに子Classを持たせる際はカスタムオブジェクトだからやはり、
Collection しか使えないのかな???

kobasanさん、ichinose さんのご指摘、ご指導には感謝いたします。
自分で検証をした事でDictionary に対する理解が少しは深まったように思います。

kobasanさんの
>>・・・やはり省略せずにキッチリaddしたほうが可読性はよくなりますね。
>このあたりは、作る人の好み次第と思いますが。
それはそのとおりなのですが、やはり、入れるところを確保せずに入力するのは
作法から外れるようで抵抗がありますね。
これも個人的な好み、感覚ですが、規定のプロパティを省略したり、暗黙の参照などが嫌いなのと同じです。
好みなら、そうですかとしかいえませんけどね。


質問(煮詰まった) さん>
横道にずれてごめんなさい。で、肝心の問題はどうなったんですかね?
せっかく詳しい方が、訪れているので聞いた方がいいですよ。

3 hits

【48104】Scripting.Dictionaryで教えて下さい。 質問(煮詰まった) 07/4/3(火) 21:10 質問
【48106】Re:Scripting.Dictionaryで教えて下さい。 neptune 07/4/3(火) 21:56 回答
【48109】Re:Scripting.Dictionaryで教えて下さい。 kobasan 07/4/3(火) 23:44 発言
【48118】Re:Scripting.Dictionaryで教えて下さい。 neptune 07/4/4(水) 11:34 発言
【48131】Re:Scripting.Dictionaryで教えて下さい。 kobasan 07/4/4(水) 21:54 発言
【48134】Re:Scripting.Dictionaryで教えて下さい。 ichinose 07/4/5(木) 0:19 発言
【48150】Re:Scripting.Dictionaryで教えて下さい。 neptune 07/4/5(木) 11:09 発言
【48130】Re:Scripting.Dictionaryで教えて下さい。 kobasan 07/4/4(水) 21:22 発言
【48220】Re:Scripting.Dictionaryで教えて下さい。 質問(煮詰まった) 07/4/9(月) 9:05 お礼

33800 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free