Excelマクロの使い方に慣れてきて、業務の自動化が進んでくると、次に気になるのがマクロの実行時間だと思います。
時間に余裕のあるときであれば「業務が自動化」されただけで十分満足なのですが、繁忙期はそうも言っていられませんよね。Excelマクロを高速化するための設定方法を解説します。
マクロの開始時に設定するべきプロパティ
'------------------------------ '事前処理 '------------------------------ Public Sub PreProcess() With Application .ScreenUpdating = False '画面描画停止 .Calculation = xlCalculationManual '自動計算停止 .EnableEvents = False 'イベント動作停止 .Cursor = xlWait 'カーソルを砂時計にする End With End Sub
マクロの終了時に設定するべきプロパティ
'------------------------------ '事後処理 '------------------------------ Public Sub PostProcess() With Application .StatusBar = False 'ステータスバーを復帰 .EnableEvents = True 'イベント動作再開 .Cursor = xlDefault 'カーソルをデフォルトにする .Calculation = xlCalculationAutomatic .ScreenUpdating = True '画面描画再開 End With End Sub
Applicationプロパティの解説
サンプルではWithで括っていますが、すべてApplicationのプロパティです。
ScreenUpdating
画面の更新を制御するプロパティです。Falseに設定することで、以降の処理で発生する画面の更新を止めてくれます。Selectを多用しているマクロの前に設定することで、マクロの処理速度を上げることができます。
Calculation
セルの値が更新されるたびに再計算処理が走ってしまうと、マクロ全体の動きが遅くなってしまいます。Application.Calculationプロパティを手動計算に設定することで、以降の再計算を停止することができます。
必要な処理が終わったら自動計算に設定し直すことを忘れずに!
Calculationプロパティに設定可能な値
- xlCalculationAutomatic …自動
- xlCalculationManual …手動
- xlCalculationSemiautomatic …データテーブル以外の自動
EnableEvents
このプロパティをFalseに設定することで、以降の処理でイベントが発生しなくなります。マクロの処理にWorkSheetのChangeを使用する場合は、このプロパティをFalseに設定しておかないと、マクロでセルの値を変更した際に「Worksheet_Change」のイベントが発生して、イベントが止まらなくなってしまいます。
Cursor
マクロ実行中のカーソル形状を設定します。上記2つのプロパティに比べると処理速度への影響は大きくありませんが、既存のマクロを実行中にマウスカーソルが「矢印」と「砂時計」に交互に切り替わってチラつく場合は、砂時計に固定すると良いでしょう。
StatusBar
ステータスバーの表示を通常に戻します。既存のマクロの中でステータスバーに何らかの文字列を表示していない場合は設定不要です。
文字列とBoolean型のどちらも設定できるところが謎なプロパティですね。
Applicationのプロパティ設定 まとめ
以上4つ(マクロ終了時は5つ)のプロパティ設定をマクロの処理の前後に実施することで、簡単に実行速度をアップすることができます。
Excelマクロを覚えたてのころは、面倒くさい操作が自動化されて、「Excelの画面が目まぐるしく動く」様子が如何にもパソコンを使いこなしている感があって面白いのですが、その画面を見飽きるくらいに多用するマクロには、今回の設定を追加して、サクッと動くようにカスタマイズしましょう!
では、今回はこの辺で。
コメント