SE_BOKUのまとめノート的ブログ

SE_BOKUが知ってること・勉強したこと・考えたことetc

EXCELのVBA(マクロ)実行速度を問答無用に高速化する方法

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分くらいになるなど劇的に変わるので、ずいぶんと助かってます。

一応解説

ようするに余分な処理を止めているだけです。

Application.Calculation = xlCalculationManual

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

 

Application.EnableEvents = False

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

Application.ScreenUpdating = False

画面の更新をとめてます。

 

上記を見てもらえばわかると思いますが、これで高速化して正しい答えを得ようと思ったら、そのマクロ内で処理が完結し、イベントや再計算に頼らないで結果を出せるようにしておかないとダメなので注意が必要です。