Excel VBA質問箱 IV

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

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


10590 / 76734 ←次へ | 前へ→

【71690】Re:表の整理
発言  UO3  - 12/3/30(金) 10:27 -

引用なし
パスワード
   ▼ドカ さん:

こんにちは

アルゴリズムの説明と追加質問の回答の前に、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は、深く考えずにコードを書けるということも、さることながら、その処理効率も
「そんなに悪くない」というレベルになっています。

是非、今後のコード作成で使ってみてください。

18 hits

【71555】表の整理 ドカ 12/3/16(金) 20:43 質問
【71557】Re:表の整理 ドカ 12/3/16(金) 20:54 発言
【71559】Re:表の整理 何か変じゃないですか 12/3/16(金) 22:44 発言
【71561】Re:表の整理 ドカ 12/3/17(土) 4:42 発言
【71560】Re:表の整理 UO3 12/3/16(金) 23:09 発言
【71562】Re:表の整理 ドカ 12/3/17(土) 4:57 お礼
【71564】Re:表の整理 UO3 12/3/17(土) 9:39 回答
【71671】Re:表の整理 ドカ 12/3/27(火) 14:10 質問
【71672】Re:表の整理 UO3 12/3/27(火) 16:43 発言
【71673】Re:表の整理 UO3 12/3/27(火) 17:20 発言
【71674】Re:表の整理 ドカ 12/3/27(火) 20:11 発言
【71675】Re:表の整理 ドカ 12/3/28(水) 9:08 お礼
【71676】Re:表の整理 UO3 12/3/28(水) 10:34 発言
【71677】Re:表の整理 ドカ 12/3/28(水) 11:10 発言
【71678】Re:表の整理 UO3 12/3/28(水) 15:08 発言
【71679】Re:表の整理 UO3 12/3/28(水) 15:13 発言
【71683】Re:表の整理 ドカ 12/3/28(水) 20:34 お礼
【71688】Re:表の整理 ドカ 12/3/30(金) 8:29 質問
【71689】Re:表の整理 ドカ 12/3/30(金) 9:06 質問
【71690】Re:表の整理 UO3 12/3/30(金) 10:27 発言
【71691】Re:表の整理 UO3 12/3/30(金) 11:46 発言
【71692】Re:表の整理 UO3 12/3/30(金) 21:10 発言
【71720】Re:表の整理 UO3 12/4/2(月) 14:10 発言
【71724】Re:表の整理 ドカ 12/4/3(火) 7:59 お礼
【71728】Re:表の整理 UO3 12/4/3(火) 13:16 発言
【71731】Re:表の整理 UO3 12/4/3(火) 16:54 発言
【71725】Re:表の整理 ドカ 12/4/3(火) 8:15 質問
【71726】Re:表の整理 UO3 12/4/3(火) 12:39 発言
【71727】Re:表の整理 UO3 12/4/3(火) 12:44 発言
【71736】Re:表の整理 ドカ 12/4/4(水) 15:59 お礼

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