言語不問!プログラミンに欠かせない「検索」高速化のコツ。対象範囲を何度もSet格納したら遅いだけ!
みなさん、こんにちは。セルネッツ竹本です。
商品コードを検索キーとして、台帳である商品マスタから「商品名」や「売価」を取得する処理は、データ存在チェックの定番です。
図のような件数ならば、短時間で処理は完了します。
が、もしも大量なレコード数だったら・・・。
◆検索の対象データ範囲に着目すると良い
掲載の図は、検索データ範囲をSet命令でバッファ格納し、商品コードの有無をチェックしています。
問題は、記載のSet命令です。
この検索Moduleをよく見ると、調べるレコードの件数分は毎回Set命令を行うことになります。
20件なら20回。1000件なら1000回。これを繰り返すModuleであることがわかります。
◆Dim変数をPublic型に変えて、一度だけSetで解決
レコード数にかかわらず、検索データ範囲は不変なので、この場合は、一回だけSet命令を使えば、何回でもこの領域を探せるのです。
他の開発言語では、開発チームにより、複数人プロジェクトがからむケースが多いため、「Public変数」は、リスクが高いものと認識されることが多いようです。
が、Excelマクロ開発においては、大規模システムになり得ない、という背景からも、Public変数の恩恵を十分に得られる記述が望ましいと考えます。
◆便利なPublic変数を上手に活用できると、ソース記述が激減
リスク回避には、Call分の名前や、「変数の名前」などから、一発で識別できる命名ルールを採用することです。
これにより、Public活用リスクは減り、可読性、メンテナンス性が向上します。
標準化ガイドラインでは、誰もが同じ書き方で、誰もがソースを解析できるように工夫すると、何よりも「属人化」が防止できます。
退職したAさんじゃないと、危険で改修などできない・・・これは避けたいものです。