Line Buffer Overflow…

書くことが多過ぎるとき、バッファーとしてこちらに書きます。不定期更新です。

高速化…

2/2も、22時を回りました。

帰ってもいいんですが…

 

あることを、試したくて。

「検索の高速化!」

 

複数のファイルをまたがる検索を、結構使います。

元帳のリストから、コードをキーに照合して、データを検索して補完したり、しています。

 

この時、「Find」という、VBAVisual Basic for Application)のメソッドを使っていたんですが、実はこのメソッド、非常に遅いことが判明して。

1回ぐらいなら、大したことはないですが、時には数千、数万回の検索を実行するので、大きな差になるらしく!

 

特に、データが増えてくる下半期は、処理が重くなるんですよね。

僕が使うんなら、別にいいんですが、開発部の人に使ってもらうところにも、Findメソッドは使われていて。

明らかに遅くなる部署も、あるんです。

 

なので、どうにか解消出来ればと、いろいろ調べていて。

そこで浮上したのが、「Match」という関数。

Excelの関数で、「Application.WorksheetFunction」で、呼び出して使います。

 

一見、VBA専門のFindが早そうですが、実はこのMatch関数の方が、数倍早いらしく。

早速組み込もうと、いろいろ調整してみたんですが…。

 

今日は、エラーの除去が、精いっぱいでした。

そんなにわかりやすい関数じゃありませんし。

明日ですね。

 

ちなみに、この関数をVBAで使う場合、第一変数に検索値を入れます。

第二変数は、検索する範囲。

注意点は、一次元的であること。

縦1列か、横1行しか指定出来ません。

第三変数はマッチングの方法ですが、ゼロを入れておけば、完全一致を検索します。

 

指定した範囲内に、検索値が入っていれば、上から何番目かが返ります。

ただし、起点からの相対位置が返るので、差し支えなければ、リストから外れても、起点を1行目から指定してしまうと、相対位置も何も、なくなります。

それが難しい場合は、起点までの行数を、後から足してあげればいいですね。

 

ただ、この時点では、ここまでは理解出来てなかったですね。

エラーをなくすだけで、精いっぱいで。

習熟には、もう少し時間がかかりそうです。