|
▼γ さん:
>>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)は要素番号の指定だったんですね
文の書き方はこの書き方なんですね?
|
|