| 
    
     |  | さて、通常の配列は、整数のインデックスを持ちますが、 このケースでは、
 "ABC41621" ---> Array(100,"[Book1]Sheet1!$A$1")
 "ABC41622" ---> Array(200,"[Book1]Sheet1!$A$2")
 "ABC41623" ---> Array(300,"[Book1]Sheet1!$A$3")
 という対応関係に関する情報が必要になります。
 
 これを配列で管理しようとしたら、
 0番目のindexに Array(100,"[Book1]Sheet1!$A$1") を持たせ
 1番目のindexに Array(200,"[Book1]Sheet1!$A$2") を持たせ
 2番目のindexに Array(300,"[Book1]Sheet1!$A$3") を持たせ
 といった一次元配列に納めるんですか?
 
 すると、
 "ABC41621"が何番目の要素になるかは、どうやって知るんですか?
 
 喩えていえば、
 今後、都道府県名は使わずに、0県,1県、2県とよぶことにする、
 とルール化するようなものですな。現場は混乱するでしょう。
 
 そのためには、別途
 "ABC41621" ---> 0
 "ABC41622" ---> 1
 "ABC41623" ---> 2
 というような関係をどこかに持たせて、
 ユーザー自身が逐一検索しなければなりません。
 そうしたことを、Dictinaryは内部で効率的に行ってくれるのです。
 (Hashテーブルという特別に工夫した仕組みを活用することで
 高速・効率的に行っているのが、Dictionaryというデータ構造なわけです。)
 
 VBAの元になっているVB6という言語仕様には、Dictionaryを持っておらず、
 外部のライブラリーに依存していますが、
 気の利いたプログラム言語では、必ずといってよいほど言語仕様として
 装備されている、とても一般的なデータ構造です。
 (名称は色々で、Hashとか、DictionaryとかAssociated Arrayとか呼ばれます)
 
 ですから、配列と同程度に普通に使えるものですし、
 Dictinaryを使ったので重くなったということは無いはずです。
 
 ■
 重くなってきたというのは、基本的にはデータ量が増えたことに起因しているのでしょう。
 関係しなくなっている古いデータがあれば、それは別途のログに移すとか、
 そうした方面の工夫の余地はありませんか?
 
 |  |