2/2も、22時を回りました。
帰ってもいいんですが…
あることを、試したくて。
「検索の高速化!」
複数のファイルをまたがる検索を、結構使います。
元帳のリストから、コードをキーに照合して、データを検索して補完したり、しています。
この時、「Find」という、VBA(Visual Basic for Application)のメソッドを使っていたんですが、実はこのメソッド、非常に遅いことが判明して。
1回ぐらいなら、大したことはないですが、時には数千、数万回の検索を実行するので、大きな差になるらしく!
特に、データが増えてくる下半期は、処理が重くなるんですよね。
僕が使うんなら、別にいいんですが、開発部の人に使ってもらうところにも、Findメソッドは使われていて。
明らかに遅くなる部署も、あるんです。
なので、どうにか解消出来ればと、いろいろ調べていて。
そこで浮上したのが、「Match」という関数。
Excelの関数で、「Application.WorksheetFunction」で、呼び出して使います。
一見、VBA専門のFindが早そうですが、実はこのMatch関数の方が、数倍早いらしく。
早速組み込もうと、いろいろ調整してみたんですが…。
今日は、エラーの除去が、精いっぱいでした。
そんなにわかりやすい関数じゃありませんし。
明日ですね。
ちなみに、この関数をVBAで使う場合、第一変数に検索値を入れます。
第二変数は、検索する範囲。
注意点は、一次元的であること。
縦1列か、横1行しか指定出来ません。
第三変数はマッチングの方法ですが、ゼロを入れておけば、完全一致を検索します。
指定した範囲内に、検索値が入っていれば、上から何番目かが返ります。
ただし、起点からの相対位置が返るので、差し支えなければ、リストから外れても、起点を1行目から指定してしまうと、相対位置も何も、なくなります。
それが難しい場合は、起点までの行数を、後から足してあげればいいですね。
ただ、この時点では、ここまでは理解出来てなかったですね。
エラーをなくすだけで、精いっぱいで。
習熟には、もう少し時間がかかりそうです。