MS-Excel‎ > ‎VBA編‎ > ‎

Procedure高速化テンプレ

エクセルマクロが重く成ってしまう場合高速化の手はいろいろありますが、ロジックの工夫以前にどんな場合でもある程度の効果を発揮するSub Procedureの書き方の例。

Private Sub Test_Procedure()

'マクロの処理高速化のための3セット
'画面更新停止→これだけでもかなり違います。
Application.ScreenUpdating = False

'自動再計算停止→マクロでセルの値をいじる場合に毎回再計算が入ってしまうと馬鹿に成らない時間がかかりますがそれをとめる事でやはりかなりの効果あり。
Application.Calculation = xlManual
'※計算式の動作を前提としたマクロの場合はやっては駄目。または「Calculate」を適切なタイミングで実行する事。

'イベント無効化→イベントトリガでマクロを起動するようなシートを作っておりマクロ自体の動作がそれらのイベントを呼んでしまって重く成るような場合に効果あり。
Application.EnableEvents = False
'※例えばワークシート変更イベントを受けて、同じワークシートを変更するような処理を作る場合に効果が高い。

'エラー処理の飛び先宣言
On Error GoTo error_010
'自前で処理せずVBAのエラーを見る場合は、
'「On Error GoTo 0」で戻す。

'■■■■■メインの処理内容を記述■■■■■
MsgBox "メインの処理内容を記述"

'イベント有効化
Application.EnableEvents = True
'※これを忘れるとクリックイベント等も無効化されたままに成り操作できなくなるので注意。

'自動再計算有効化
Application.Calculation = xlAutomatic

'画面更新有効化
Application.ScreenUpdating = True

'メイン処理ここまで
Exit Sub

'エラー処理
error_010:

'■■■■■エラー時の処理内容を記述■■■■■
MsgBox "エラー時の処理内容を記述"

Resume Next

End Sub