BOKUのブログ

ジャンルにこだわらず、ノートの感じで書いてます

EXCELのVBA(マクロ)実行速度を問答無用に高速化したい時に追加するコード

EXCEL VBA(マクロ)の実行速度を、とりあえず速くしたいときは、処理の前後に以下のコードをコピペすればいいです。

実行するコードの前に以下のコードをおく

Dim startTime As Double
Dim endTime As Double
Dim processTime As Double
startTime = Timer
    
With Application
   .Calculation = xlCalculationManual
   .EnableEvents = False
   .ScreenUpdating = False
End With

 

実行するコードの後に以下のコードをおく

With Application
   .Calculation = xlCalculationAutomatic
   .EnableEvents = True
   .ScreenUpdating = True
End With
    
endTime = Timer
processTime = endTime - startTime

 

これだけで相当速くなります。僕も仕事でよく使いますが、約40分くらい実行にかかっていたのが、約2分くらいになるなど劇的に変わります。

 

やっていることは、余分な処理を止めているだけです。適用対象の条件として、そのマクロ(VBA)内で処理が完結し、イベントや再計算に頼らないで結果を出せるようになっている必要があります。最後に、とめている処理を補足しておきます。

 

「Application.Calculation = xlCalculationManual」は再計算をとめてます。デフォルト(xlCalculationAutomatic)だと、値が変わる都度再計算が実行されて遅くなるので、それをマニュアルにして抑制してます。

 

「Application.EnableEvents = False」は、BookとSheetのイベント(セルを選択したりシートを切り替えたりするなどの操作によってVBAを発火させること)をとめてます。

Application.ScreenUpdating = False」は画面の更新をとめてます。