| 
    
     |  | ▼γ さん: >>Dictionaryというのは、Keyと値の組み(対応関係)を管理する容れ物です。
 >と書きました。
 >変数key,valを使って書きますが、
 >Dictionaryにこの組を追加する際の書き方として、
 >   dic.Add key,val  '  ---- (1)
 >   dic(key) = val   '  ---- (2)
 >の二つの方式が利用できます。
 >
 >ただし、既にkeyというキーがあるときの振る舞いが異なります。
 >・ (1)はエラーになり、
 >・ (2)はエラーにならず、keyに対応するdicの値が新たに valに変わります。
 >
 >ヘルプでは(1)が採用されていますが、実務的には(2)を使う場面が多いです。
 >というのは、Dictionaryの使い方として、
 >普通は、重複を除いてキーを集めるなどという使い方が多いので、
 >その場合は、存在するかどうかは構わずに、
 >単に dic(key) = Empty などとすればいいわけです。
 >逐一、存在をチェックする必要はありません。
 >Emptyを上書きしていくことでも問題が無いわけです。
 >
 >同じkeyの個数をカウントするなどという場合も、
 >単に
 >  dic(key) = dic(key) + 1
 >とすることが多いです。
 >( 単に、dic.Add key, dic.Item(key) + 1 とするとエラーになるので注意が必要です。)
 >
 >-----------
 >2.
 >> パソコン自体どのようにこれが対応していると判断しているかの
 >> イメージがつかめていません
 >Dictionaryオブジェクトの実装には、Hash テーブルというものが使われていて、
 >検索スピードを上げる工夫がされているそうですが、
 >それは気にする必要はありません。
 >
 >Dictionaryのイメージは、単に、
 >  二つのものの対応関係を管理する容れ物
 >ということで良いと思います。
 >
 >一次元の配列は、
 >  0  --> ary(0)
 >  1  --> ary(1)
 >  2  --> ary(2)
 >のように、"整数をキーにして"対応関係を持っていることが特徴です。
 >参照するときは、整数を指定します。ary(0)のように。
 >
 >Dictionaryの場合は、整数に限らず文字列などをキーにして、
 >値を保存したり、キーを指定して対応する値を取り出すことができるのです。
 >通常、keyは文字列であることが多いですね。
 > "aaa" --> 対応する値
 > "bbb" --> 対応する値
 >のような対応関係です。
 >
 >一方、Dictionayの値に使えるのは、
 >数値でも文字列でも、今回のように配列でも、Excelのオブジェクトでも
 >なんでもOKです。
 >場合によっては dictionaryオブジェクトを値に持つdictionaryすら作れます。
 >
 >要するに、Dictionaryは、
 >  整数に限らないkeyを指定して、それに対応するなんらかの値を取り出すことができる仕組み、
 >と考えれば良いわけです。
 >
 >-------------------
 >3.
 >今回の例では、値そのものに配列が使われています。
 >> この部分のRange(Tdic(dkey)(1))の"(1)"の部分がわかりません
 >
 >fDic(com & dt) = VBA.Array(c.Value, c.Address(External:=True))
 >とDictionryを構成した時の
 >Range(tDic(dKey)(1)).Value
 >の解釈ですが、
 >  ・ tDic(dKey) の部分で、Dictionaryの値を取り出しています。
 >   それは、VBA.Array(c.Value, c.Address(External:=True))のような配列です。
 >   つまり、要素が二つのArrayです。
 >
 >  ・ (1)というのは、そのArrayの2番目の要素という意味です。(0が1番目です)
 >   したがって、
 >   tDic(dKey)(1) は、
 >   "[Book1]Sheet1!$A$1" というような、セルc のアドレスを示す文字列 です。
 >結局、
 >Range(tDic(dKey)(1)).Value は、
 >Range("[Book1]Sheet1!$A$1").Value というような内容になります。
 >---------------------
 >何かあれば追加質問して下さい。
 
 
 1.返事いただきありがとうございます
 Key,Itemの追加の仕方が2通りあるのは初めて知りました
 このあたりは勉強になりましたありがとうございます。納得です
 2.
 一番自分の中で難解だったパソコン処理のイメージですが
 行列を連結した文字列をkeyとしForEachステートメントで自動でアドレスを辞書に追加していくイメージ
 たとえば変数CががC12ならその交差している行と列の連結がKeyになる
 と思うのですがこの1文でその解釈をパソコンがしてくれているイメージでいいんでしょうか
 ?
 
 
 3.
 後(1)は要素番号の指定だったんですね
 文の書き方はこの書き方なんですね?
 
 
 |  |