May 11, 2018

Excel VBA の高速化のポイント

 転職してから業務の様々な場面でExcel VBAを用いることが増えました。世間でもRPA等といった初歩的な自動化/効率化は非常に注目を集めていますが、そんな大仰なものを用いなくてもVBAでやりたいことの多くは実現できます。  このVBA、言語仕様はもはや古いというレベルではないですし、実行速度も極めて遅いです。しかし、わざわざ開発環境を自分で整える必要もなく、何よりも多くの方に馴染み深いアプリケーションでプログラミングをたやすく実現できるという強みがあります。何でもかんでもExcelで実装し、Accessで処理すべきデータの管理/処理まで無理やりExcelにやらせている人が多かったりするのは否めませんが、マクロ付きファイルを頒布する際等にはやはり「Excelのファイルである」ということは有利です(すべての頒布先がAccessを利用している状況は稀でしょう。しかし、Excelにその心配がいるでしょうか?)。また、マクロの記録機能を用いれば初学者でも何となく動かしてみることはできますよね。さらに、記述した内容を簡単に視認できるというのは、修養のための環境としてはもってこいだったりするのです。  それでもいつも付きまとうのは「実行速度の遅さ」。特に、数十万レコードといった大量のデータをExcelで処理しなければならないときなど特に、適切でないコーディングが処理時間を大幅に膨らませてしまう恐れがあります。  網羅的な記述は目指せませんが、思いつく限りのポイントを挙げてみました。ご指摘やご意見頂戴できると幸いです。 参照を渡してプロシージャ内からオブジェクトにアクセスするのと、グローバルオブジェクトへアクセスするのとの間で速度差はほとんどない Boolean型変数の判定は「=True」「=False」よりも「」「Not」の方が早い 文字列型変数A、Bの比較は「A=B」「A<>B」よりも「A...