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」は画面の更新をとめてます。