【Excelマクロ】動作のスピードアップ

Excelマクロ

動作のスピードを上げるには

マクロを構築する上で、処理するデータ量が多くなると必ずと言っていいほど、ぶち当たる壁が「動作が重くなる」ということです。

もちろん、結果が同じでも途中の動きが異なる場合には、マクロのVBAコード自体も全く別なものになりますが、できる限り負荷が少ないように作成するのが定石です。

とはいえ、多少なりともスピードを上げるには、次のような動作をするコードを入れるのも一つの方法です。

1.画面の遷移(移動)を停止する
2.数式の動作を停止する
3.警告を停止する

画面の遷移(移動)を停止する

マクロを実行する際、画面の遷移(例えば、他のセルやシートを選択する動作)をオンにしたままだと、動作に余分な負荷がかかり、結果として、マクロ全体の動作が遅くなってしまいます。

そこで、マクロ動作中は画面遷移を一時的に停止させるのが基本です。これにより、余計な処理が省かれ、全体の動作スピードが向上します。

ただし、マクロの実行中に動きを見ながら確認したいという場合は、画面遷移を動作させてください。

マクロ実行中に画面遷移を停止するには、以下のコードを使用します。

Application.ScreenUpdating = False

Application: Excel全体を指します。
ScreenUpdating: 画面の更新(遷移など)を管理するプロパティです。
False: 更新を停止する指定です。

通常、このコードはVBAコードの一番初めに記述し、画面遷移をオフにします。そして、処理が終わった後には、以下のコードで画面遷移を再開します。

Application.ScreenUpdating = True

このように、停止と再開のコードをセットで記述するのが一般的です。これにより、画面遷移による余計な負荷を防ぎ、マクロの動作速度を向上させることができます。

数式の動作を停止する

Excelシートに含まれる数式とは、四則演算(+、-、×、÷)や関数(SUM、VLOOKUPなど)があります。シート上にこの数式の数が多いほど、マクロを実行する際に「何度も再計算」が行われるため、動作が重くなる原因になります。

そのため、マクロを動かす場合は、数式の再計算を一時的に停止することをお勧めします。

ただし、注意が必要で、マクロの動作の一部として、シート内の関数の計算結果を必要とする動作を組み込んでいる場合、この停止の動作を入れてしまうと、マクロが動いている間は計算がされないので、停止する前の「結果」を元に動作してしまいます。

マクロを動かし、何かしら数値が変わった状態で、「シート上の関数を動かした上」で、その後のマクロを動作せたい場合には、「一次的に停止を解除する」か「そもそもこの停止動作を使用しないか」事前に検討が必要です。

また、数式に関しては、「停止」「再開」とお話をしましたが、実際には「手動」か「自動」の選択になり、手動の場合には「保存した際に再計算を行うか」「特定のボタンを押すと再計算するか」を設定できます。

「自動」の場合には、数値が変わるたびに計算されます。

なお、マクロ実行中に数式の再計算を「手動」に切り替えるには、以下のコードを使用します。

Application.Calculation = xlManual

Application: Excel全体を指します。
Calculation: 数式の計算に関する設定です。
xlManual: 再計算を「手動」に切り替える指定です。

厳密に言うと、これは再計算を「停止」するのではなく、数式の再計算を「自動」から「手動」に設定変更している状態です。

そのため、マクロの動作が終わった後には、必ず以下のコードで再計算を「自動」に戻しておく必要があります。

Application.Calculation = xlAutomatic

これを忘れると、通常の作業中でも数式が自動で更新されず、誤った資料になる危険性があります。

「手動」に切り替えた場合には「自動」に戻すことを忘れないようにしましょう。

警告を停止する

マクロを実行する際、シートを削除するなどの操作で、以下のような警告メッセージが表示されることがあります。

「このシートを削除すると、元に戻せません。続けますか?」

マクロ動作中にこのような警告が表示されると、毎回手動でクリックやEnterキーを押す必要が生じるため、自動化の意味がなくなってしまいます。

押さなくてもいいようにするには、この表示自体を「表示させない」ように、マクロ動作中は警告を一時的に停止させることで、表示しなくすることがでいます。

Application.DisplayAlerts = False

Application: Excel全体を指します。
DisplayAlerts: 警告メッセージの表示を制御するプロパティです。
False: 警告を停止します。

ただし、マクロの動作が終わっても警告を停止したままにすると、重要なメッセージに気付かないリスクがあります。

そのため、マクロの処理が完了したら、以下のコードを記述して警告を再開することが必要です。

Application.DisplayAlerts = True

このように、停止と再開をセットで記述することで、マクロの動作中は停止、動作後は再開することで、マクロ動作中に止まることがないようにすることができます。

まとめ

今回説明した3つの設定については、マクロ全体に適用することが多いので、次のように記述することが多いです。

・コードの一番初めに「停止」や「手動」の設定を記述
・コードの一番最後に「動作(再開)」や「自動」設定を記述

これにより、マクロ全体で動作を早くする処理が可能になります。

一方で、一部の処理だけに適用したい場合には、必要な範囲内にのみ「停止」や「手動」のコードを記述します。この場合、停止の影響はその範囲内に限定されます。

注意点として、停止設定を解除しないままだと、通常の作業時に不具合が発生する可能性があります

そのため、最後には必ず「再開」や「自動」のコードを記述し、元の設定に戻すようにしましょう。

コメント