VBAマクロの実行待ち時間が楽しめない時に

VBAマクロの実行待ち時間を少しでも短くできないかな?

一生懸命書いたVBAマクロの実行が遅い!と感じた時、VBAマクロの実行待ち時間を少なくする努力がしたい場合は、次の方法をいくつか取り入れてみてください。

EW-SYS.INFO

VBAマクロの実行待ち時間を少なくする方法いろいろ

 (危険度:X)の表記は、VBAマクロの実行が意図しない終了(エラー発生など)で、経験上めんどくさいことになる度合いを示してみました。
 だいたいはアプリケーション(Microsoft Excel©)の再起動で元に戻ります。

計算方法を自動から手動に切り替える(危険度:低)

 セルに四則演算や関数など計算式を入力するだけで、その答えが出力されるのは、自動計算機能が働いているからです。
 VBAマクロでセルに値を代入する度に、この自動計算機能が働いて、実行速度を遅くしていることがあります。
 計算方法を「自動」から「手動」に変えて、実行時間を短縮するというものです。

Application.Calculation = xlCalculationManual

 VBAマクロが終わる時に「自動」に戻してあげてください。

Application.Calculation = xlCalculationAutomatic

 計算方法の切り替えは、オプションやリボンの中に自分で切り替えることができます。

※VBAマクロの中で、セルの計算結果を値として利用して別の答えを求めるような場合は、セルの計算式が実行されないので、正しい結果が求められません。

マウスカーソルを待機状態に変える(危険度:中)

 マウスポインタの形状を「矢印」から「待機状態」にするだけで、少しは待ち時間中の気も紛れるというもの。
 実行速度になんら影響はありません。

Application.Cursor = xlWait

 VBAマクロが終わる時に「矢印」に戻してあげてください。

Application.Cursor = xlDefault

 まったくの気休めですが、それでも実行中であることが判るので、まんざらバカにできません。

※故意に「待機状態」にしたのですから、故意に「矢印」に戻さないと、VBAマクロが終わった後でも「待機状態」のままになります。

画面表示の書き換えを止める(危険度:高)

 画面表示の書き換えを止めて、その分の時間を稼ぐというものです。
 時間のかかるセルに値を入れるようなループ処理の前に書いておくと良いでしょう。

Application.ScreenUpdating = False

 必ず、VBAマクロが終わる時には、Trueに戻してあげてください。

なんかいろいろイベントを無効にする(危険度:高)

 VBAマクロ実行中でも、いろいろとアプリケーションのイベントが発生しているので、それらを無効にして、その分の時間を稼ぐというものです。

Application.EnableEvents = False

 必ず、VBAマクロが終わる時には、Trueに戻してあげてください。

そもそも遅いと感じなければ良い(危険度:無)

 最終的には、精神論に落ち着くもので、「マクロが遅い!」と感じても「その作業を自分の手でやったら一日で終わるの?」と考えれば、実行の待ち時間なんて些細なものです。
 大らかな気持ちで待ちましょう。

2021/06/23に追記

これらの処理高速化で困るであろう私に

 VBAマクロの開発段階でテストしている時に、予期せぬエラーが起きて、最後まで走らず、高速化対策の設定が残ってしまうということもしばしば。
 そこで、高速化対策を無効化するためだけのマクロを、最初に一つ組んでおくと良いでしょう。

Sub Macro1()
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.Cursor = xlDefault
End Sub

 正しくエラートラップを設定していれば、このようなマクロは要らないハズなのですが、予期しないことは予期しない時に起きるものです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください