「自分が作ったマクロが遅い…」こういった経験ありますよね。
VBAの高速化の第一歩として、画面描画の停止があります。
VBAでは、セルの値を入力したり、コピーしたり、行を挿入、削除したりします。
上記操作を実行すると、Excel上でアニメーション描画されており無駄なリソースを使ってしまってマクロ自体が遅くなるのです。
今回は、画面描画を停止する方法をご紹介します。
- ExcelVBAの基礎である画面描画の重要性について解説します。
- 画面描画の注意点についても解説します。
構文
画面描画を停止する方法は以下の通りです。
Application.ScreenUpdating = False
逆に、描画を再開するときには以下を実行してください。
Application.ScreenUpdating = True
ソースコードの終わりに、必ず画面描画をONにしてください。
描画をONにしないと、マクロが終了した際にExcelがフリーズしたような挙動になります。
期待効果について
画面描画を停止すると、どれほど早くなるのかを実験してみました!
検証の前提
本テクニックで一番効果が出るのが、「画面描画されるアクション」です。
今回の検証では、シートを1000枚作成するソースコードで検証してみました。
結論として、検証結果は以下となりました。
画面描画あり(テクニックを使用しない)の場合
サンプルコード
Option Explicit
Public Sub testScreenUpdate()
Debug.Print "-- 画面描画あり --"
Debug.Print Now
Dim i As Long
' シートを1000枚作成する
For i = 1 To 1000
ThisWorkbook.Worksheets.Add
Next i
Debug.Print Now
End Sub
実行結果
以下の通り、シートが1000枚作成されました!
21秒の時間で作成が完了しています。
画面描画なし(テクニックを使用する)の場合
サンプルコード
画面描画の停止を、開始・終了時に差し込んでいます。
Option Explicit
Public Sub testScreenUpdate()
Debug.Print "-- 画面描画なし --"
Application.ScreenUpdating = False
Debug.Print Now
Dim i As Long
' シートを1000枚作成する
For i = 1 To 1000
ThisWorkbook.Worksheets.Add
Next i
Debug.Print Now
Application.ScreenUpdating = True
End Sub
実行結果
11秒の時間で作成が完了していますね!
検証結果まとめ
21秒 → 11秒になり、なんと処理時刻が約半分程度にパフォーマンス向上していることが分かります!
# | 分類 | 所要時間 |
1 | 画面描画あり | 21秒 |
2 | 画面描画なし | 11秒 |
差分 | 10秒 |
最後に
いかがでしたでしょうか。
今回のテクニックは高速化の基礎中の基礎となります。
どういったマクロを組む場合でも、テンプレートのように画面描画を停止してもいいくらいだと思います!
この記事が、皆さんのお力になれれば嬉しいです!
コメント