|
さて、通常の配列は、整数のインデックスを持ちますが、
このケースでは、
"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を使ったので重くなったということは無いはずです。
■
重くなってきたというのは、基本的にはデータ量が増えたことに起因しているのでしょう。
関係しなくなっている古いデータがあれば、それは別途のログに移すとか、
そうした方面の工夫の余地はありませんか?
|
|