実行速度の改善
にメンテナンス済み
VBA に慣れていない場合に、必要な処理だけウェブサイトから拾い集め、とりあえず実装するというケースは少なくないかと思います。
ですが、出来上がったものを実行してみると、処理中に画面がガタガタ動いたり、マウスが頻繁に処理中モードと通常モードに切り替わってしまうことはありませんか?
そういった方向けに、作成した処理の前に読み込ませるだけで、簡単に上記の問題が解決され、さらに高速化できるケースもあるコードをご紹介いたします。
VBA コード
実行速度を改善する汎用コード
Public Sub sample()
Dim previousDisplayAlerts As Boolean
Dim previousScreenUpdating As Boolean
Dim previousEnableEvents As Boolean
Dim previousCalculation As XlCalculation
On Error GoTo CATCH
previousDisplayAlerts = Application.DisplayAlerts
previousScreenUpdating = Application.ScreenUpdating
previousEnableEvents = Application.EnableEvents
previousCalculation = Application.Calculation
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Call 実際に実行するマクロ
FINALLY:
Application.DisplayAlerts = previousDisplayAlerts
Application.ScreenUpdating = previousScreenUpdating
Application.EnableEvents = previousEnableEvents
Application.Calculation = previousCalculation
Exit Sub
CATCH:
Debug.Print (Err.Description)
Resume FINALLY
End Sub
実際に実行するマクロの部分に、作った Sub XXXXXX()プロシージャのXXXXXXを書き込むだけで、今までと同様の動作をしながら、画面のガタガタやマウスカーソルの変化が直ります。
Application.Calculation などの設定は Excel 全体に影響します。処理前の値を変数に保存してから変更し、正常終了時だけでなくエラー発生時にも必ず元に戻すようにしておくと、ユーザーの設定を不用意に上書きせずに済みます。
エラーが出た場合に、操作している人にもわかるようにしたい場合は、Debug.Print (Err.Description) の部分を、MsgBox "エラーが発生しました。エラー内容:" & Err.Description などと変更するといいかと思います。
#VBA