Excel VBA質問箱 IV

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

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


7189 / 76732 ←次へ | 前へ→

【75134】Re:表の比較
発言  γ  - 13/12/17(火) 6:35 -

引用なし
パスワード
   >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 というような内容になります。
---------------------
何かあれば追加質問して下さい。  
400 hits

【73761】表の比較 t−k 13/2/10(日) 15:38 質問
【73762】Re:表の比較 UO3 13/2/10(日) 19:22 発言
【73763】Re:表の比較 UO3 13/2/10(日) 19:51 発言
【73766】Re:表の比較 t−k 13/2/10(日) 22:56 発言
【73767】Re:表の比較 UO3 13/2/11(月) 6:46 発言
【75126】Re:表の比較 T-k 13/12/14(土) 0:02 質問
【75127】Re:表の比較 γ 13/12/14(土) 6:36 発言
【75133】Re:表の比較 T-k 13/12/17(火) 0:55 発言
【75134】Re:表の比較 γ 13/12/17(火) 6:35 発言
【75135】Re:表の比較 T-k 13/12/18(水) 0:28 発言
【75138】Re:表の比較 γ 13/12/18(水) 23:17 発言
【75141】Re:表の比較 T-k 13/12/20(金) 0:36 発言
【75143】Re:表の比較 γ 13/12/20(金) 7:16 発言
【75147】Re:表の比較 T-k 13/12/20(金) 23:50 お礼
【73768】Re:表の比較 UO3 13/2/11(月) 14:08 発言
【73770】Re:表の比較 t−k 13/2/12(火) 23:38 お礼
【73780】Re:表の比較 UO3 13/2/13(水) 19:30 発言
【81386】Re:表の比較 T-K 20/7/13(月) 23:33 質問[未読]
【81388】Re:表の比較 γ 20/7/14(火) 5:43 発言[未読]
【81393】Re:表の比較 T-K 20/7/14(火) 19:54 発言[未読]
【81394】Re:表の比較 γ 20/7/15(水) 9:15 回答[未読]
【81395】Re:表の比較 T-K 20/7/15(水) 17:45 お礼[未読]
【81396】Re:表の比較 マナ 20/7/15(水) 21:02 発言[未読]
【81398】Re:表の比較 マナ 20/7/15(水) 21:40 発言[未読]
【81397】Re:表の比較 マナ 20/7/15(水) 21:04 発言[未読]
【81399】Re:表の比較 T-K 20/7/15(水) 23:57 発言[未読]
【81400】Re:表の比較 マナ 20/7/16(木) 21:05 発言[未読]
【81410】Re:表の比較 T-K 20/7/23(木) 23:51 発言[未読]
【81412】Re:表の比較 マナ 20/7/24(金) 11:03 発言[未読]
【81415】Re:表の比較 マナ 20/7/24(金) 11:51 発言[未読]
【81429】Re:表の比較 T-K 20/7/29(水) 23:31 発言[未読]
【81433】Re:表の比較 マナ 20/7/30(木) 19:30 発言[未読]
【81434】Re:表の比較 マナ 20/7/30(木) 20:20 発言[未読]
【81435】Re:表の比較 T–K 20/8/1(土) 12:29 お礼[未読]

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