Sub NoDrawingSample()
With Application
.ScreenUpdating = False ' 画面描画を停止する '
.Calculation = xlCalculationManual ' 自動計算を停止する '
End With
' /// ここから '
' 処理を記述
' ここまで /// '
With Application
.ScreenUpdating = True ' 画面描画の停止を解除する '
.Calculation = xlCalculationAutomatic ' 自動計算の停止を解除する '
End With
End Sub
ScreenUpdatingプロパティにFalseをセットして画面描画を停止すると、セルの選択やコピー等の操作により画面が更新されなくなるので動作がスマートになり、VBAの処理速度も向上します。
ScreenUpdatingプロパティは、プロシージャーを抜けると自動的にTrueがセットされますが、予期しないトラブルを防ぐために一連の処理が終了したら、Trueをセットして元に戻します。
Calculationプロパティについては、xlCalculationManualを指定すると計算方法が手動になります。
シート内にあらかじめ計算式が挿入されていてセルにデータを置いていくような処理では、既定の状態では、データが挿入される都度、「自動」で再計算されるので処理に時間がかかってしまいます。これを「手動」に切り替えて再計算されないようにすることで、ファイルの構成によっては処理速度の向上が期待できます。
ただし、再計算後の数値を処理の途中で参照するような場合は、正しい結果が得られなくなる恐れがあるので、必要に応じて、Calculateメソッドで再計算を実行します。なお、ScreenUpdatingプロパティとは異なり、Calculationプロパティは自動的に元の設定に戻らないため、処理が終了したら、明示的にxlCalculationAutomaticに戻す必要があります。
以下のページにVBAで処理を実行する際に、オフにするのが望ましいApplicationクラスの各種プロパティ、及び復元処理が実行される前にエラーで終了する可能性を加味したナイスなクラスモジュールが公開されています。
0 件のコメント:
コメントを投稿