会社に入って年の浅い頃、コンピュータの処理速度が遅かった頃の話を飲んだ席で取締役から聞かされたことがある。

「どれだけ負荷の重い処理を軽くするかは重要だった。2ファイルのマッチング処理をするにせよ、たとえばソート処理は資源を食うから先にマッチングをして、それで合わなかったデータだけをソートし再度マッチング処理をした」など。


今だと資源を意識して設計することも少ないかもしれない。それよりも保守性の高さを求められる事の方が多いかもしれない。


しかし、例えばメモリがかなり制限される組み込みなら保守性よりもプログラムサイズがコンパクトであることを求められることもある。その際は「どう組んだら資源を節約できるか」が重要になる。つまり、与えられた環境下、条件下により優先事項は変わってくるのだ。


Excel VBA では関係のないことだろうか?今どきのPCならメモリもたくさん搭載しているから大丈夫だ、と考える人もいるが、早計である。

職場によっては型遅れのPCを使っている職場で、OS稼働に必要とされる最低メモリしか積んでいなかったり、たとえスペックがよくても常駐プログラムをたくさん起動してメモリをバカ食いしていたり、ハードディスクにわんさかデータを突っ込んでリソースが足りなくなっていたり、ということはある。

リソース不足だと、Excel VBAで作成したプログラムは誤動作を起こしやすい。実際に特定のマシンでのみエラーが頻発することもあったが、PCを入れ替えれば問題が解決した、ということもある。可能なら最低なマシンを確認し、それでも確実に動作するように構築できるのが理想かもしれない。が、現実問題は「ごく一部で動かないならPC交換orリソース追加」で対応した。顧客のPCを全部チェックしてられなかったと言うよりは、誤動作を起こすことがある、という認識がなかったからである。


Excel VBA でのリソース節約はどのようにすればよいか?いくつか手はあるが、まず代表的な所では「変数をきちんと定義する」ことだろう。定義しないと バリアント型になる。バリアント型は他の型よりもメモリをたくさん消費するのだ。リソース節約については提供できるくらいの情報量になってきたら出したいと思う。これともう一つが「処理方法による速度の違い」との関連も併せて書ければ、と思っている。


なお、リソース不足のPCはマシンスペックで決まるのではなく、個々の使用状況によって変わってくる。Excelで作成したシステムを稼働させるためのスペックを顧客から求められても、状況によって変わる、という説明は必要であろう。