|    | 
     ▼ドカ さん: 
 
こんにちは 
 
アルゴリズムの説明と追加質問の回答の前に、Dictionaryというものを 
さわりだけ、さらっとご説明します。(既にご存知であればスルーしてください) 
(以下の説明の中で、Dictionaryの変数を、とりあえず Dic とします) 
 
本来なら、参考書やネットで、わかりやすいものを見つけて読んでいただくほうが 
私のつたないメモよりは、ずっと役立つとは思いますが。 
 
Dictionary とは、文字通り、「辞書」です。 
たとえば英和辞書があって、Summer という項目を引けば、その内容を見ることができますね。 
で、この中身は、以下に説明するような配列です。 
ですので、Dictionaryのテクニカルタームとしての日本語訳は、一応「連想配列」ということに 
なっています。 
この「連想」が、人工知能的な響きがあって、だから難しいものなんだろうなと敬遠される 
要因にもなっているかもしれませんが、実は、すごく簡単で便利なものです。 
 
Dictionary の構造は キー(辞書の索引)とデータです。 
で、このキーとデータが、それぞれ「1次元配列」におさめられています。 
(プロパティでいうと Dic.Keys がキーの配列で、Dic.Itemsがデータの配列です) 
1次元配列というのは、シートでいいますと「行」にあたります。 
Sheet1の1行目にキーが記載されていて、それとは別に、Sheet2の1行目にデータが記載されている 
そんなイメージです。 
 
通常の配列と異なる点としては、もちろん、キーで直接データを呼び出せるということが 
ありますが、もう1つ、通常の配列ですと、あらかじめ配列の大きさを宣言する必要がありますね。 
たとえば Dim V(1 to 10) これは1次元配列で要素が10個のもの。 
ここに11個目の要素を追加することは(普通のやり方では)不可能です。 
必要であれば ReDim PreServe V(1 to 11) といったように追加の都度、配列サイズを変更します。 
でも、Dictionaryの場合は、おかまいなしに、どんどん登録していくことができます。 
で、このデータはVariant型で用意されていますので、どんな値でもいれておくことができますし 
たとえば、何も登録されていないキーに対して、Dic(新しいキー)=dic(新しいキー)+100 という演算も 
できます。これは、たとえばシート上で空白のA1があったとして別のセルで =A1+100 とやっても 
エラーにならずに計算結果がでるのと同じと考えてください。 
 
大きさを考えないで、どんどん追加できる。 
何でも登録できる。 
直接呼び出すことができるので、データの並び順に悩まず、何回か前に登録したデータに対して 
簡単に加算減算、上書きができる。 
で、書いた内容を1つずつ取り出すこともできますし、上で説明したように、 
中身は1次元配列そのものですから、配列として取り出したものを処理することもできる。 
 
このようなものですので、むしろ、初心者向けんのツールだということもできます。 
 
実は、大量データを相手に複雑なマッチング処理を行おうとすると、 
処理にふさわしい並び替え => その処理に必要な複雑なマッチングロジック 
これが最も処理時間が早くなるほうほうなんですが、初心者のみならず、このアルゴリズムを 
正確に実装するのは、大変に骨が折れます。 
 
Dictionaryは、深く考えずにコードを書けるということも、さることながら、その処理効率も 
「そんなに悪くない」というレベルになっています。 
 
是非、今後のコード作成で使ってみてください。 
 | 
     
    
   |