ExcelVBA:プログラムの高速化 その2

今回はExcelVBAの高速化の第2弾です。
仕事で利用しているマクロ/VBAの実行速度が状況によって劇的に高速になります。
その方法は「画面更新を止める」という方法です。

通常、新規ブックを開いたり、新規シートを追加したりすると現在アクティブのブックとシートから、新しく作成されたブックやシートに画面が切り替わる更新処理が動きます。この更新処理が入ることによってプログラムの実行速度が時間が遅くなります。

まずは画面更新を止めていないプログラムです。test1プロシージャは新規シートを作成する処理を20回繰り返すプロシージャです。

こちらのプロシージャの実行速度を計測すると0.51171875秒でした。
次は画面更新を止めたtest2プロシージャです。画面更新を止めるにはApplication.ScreenUpdatingプロパティの値をfalseにします。

こちらのプロシージャの実行速度を計測すると 0.1484375 秒でした。今回はシートを追加する処理を20回繰り返すだけのテストプログラムですが実行速度が約3割減になりました。実際に仕事で利用するプログラムは様々な箇所で画面更新が入る箇所があります。 Application.ScreenUpdatingプロパティ を利用すると簡単に処理速度を向上させることができます!!
また1つポイントです。 Application.ScreenUpdatingプロパティの値をfalseにすると画面更新が止まります。プロシージャを終了する前に必ず Application.ScreenUpdatingプロパティの値をtrueに戻します。こちらを忘れると プロシージャ がエラーなどで正常終了しなかった場合にずっと画面更新が止まったままになってしまうこともありますので注意してください。

今回は実行速度を上げる代表的なものを紹介させて頂きした。次回以降、順番にプログラムの書き方による実行速度を上げる方法など紹介していく予定です。

最新情報をチェックしよう!