【Excel VBA】画面更新・再計算・イベント停止による高速化

最終更新日:

マクロの高速化

マクロの処理速度を上げるために最初に試したいことは、画面更新や再計算処理を止めることです。
これらが動作したままマクロを実行すると、内容によっては画面の更新などが処理中に毎回行われ、
実行速度がかなり遅くなってしまう場合がある。

そのためマクロの開始時に下記を一時的に止め、マクロの終了時に戻すという処理を追加するといい。
イベントはあまり影響が低いかもしれませんが、とりあえず全部止めてみると手っ取り早いでしょう。

サンプル

関数でもいいのですが、今回はプロパティとして作成します。

'再計算・イベント・画面描画(False=停止、True=動作)
Property Let Updating(ByVal Flag As Boolean)
 With Application
  .Calculation = IIf(Flag, xlCalculationAutomatic, xlCalculationManual)
  .EnableEvents = Flag
  .ScreenUpdating = Flag
 End With
End Property

上記のプロパティを実行させる処理の開始位置と終了位置に記述すれば完成です。

Sub test()
 Updating = False '停止
 ・・・処理・・・
 Updating = True '動作
End Sub

有効な場面

上記の処理は、ループでセルへの入力を頻繁に行わなければならない処理などに有効です。

とりあえず、実行してみて遅いなと感じた場合には、
上記の処理を入れて様子を見てみるといいでしょう。