【VBAリファレンス|実務向け】シートの再計算を設定する(EnableCalculationプロパティ)|Excel VBA

スポンサーリンク

なぜ、再計算の制御が必要なのか?

Excel VBAで大量のデータを処理する際、マクロの実行速度が極端に遅くなって困った経験はありませんか?その原因の多くは、セルの値を書き換えるたびにExcelが自動的に行っている「再計算」にあります。関数が多用されたシートでは、一つのセルの値を変更するだけでシート全体の再計算が走り、処理時間が大幅に増大します。今回紹介するEnableCalculationプロパティを使えば、マクロ実行中だけ再計算を一時停止させ、処理を劇的に高速化することが可能です。

EnableCalculationプロパティの基礎知識

EnableCalculationは、Worksheetオブジェクトに対して「シートの再計算を行うかどうか」を指定するプロパティです。
・True:再計算を行う(Excelの標準状態)
・False:再計算を行わない

このプロパティをFalseに設定すると、セルに数式が含まれていても、値の書き換えに伴う自動計算がストップします。これにより、マクロの処理負荷を最小限に抑えることができるのです。

実装の考え方

実務で活用する際は、「処理の開始前にオフにし、処理終了後に必ずオンに戻す」という手順を徹底してください。もしオンに戻すことを忘れると、ユーザーが数値を変更しても結果が更新されないという不具合(誤解を招くブック)になってしまいます。エラーが発生しても確実にオンに戻せるよう、後述するエラーハンドリングの考え方を取り入れるのがベテランの作法です。

サンプルプログラム

以下のコードは、大量のデータ更新があるシーンを想定しています。

Sub OptimizeCalculation()
Dim ws As Worksheet
Set ws = ActiveSheet

‘— 処理開始前に現在の設定を退避、または強制的にオフにする
‘— エラー発生時でも再計算をONに戻すため、On Error GoToを使用するのが理想です
On Error GoTo ErrorHandler

ws.EnableCalculation = False

‘— ここで大量のデータ更新処理を行う
‘— 例:A1:A10000に値を入力
ws.Range(“A1:A10000”).Value = 100

‘— 処理終了後に必ず再計算をONに戻す
ws.EnableCalculation = True
MsgBox “高速処理が完了しました。”

Exit Sub

ErrorHandler:
‘— 万が一エラーが起きても再計算をONに戻してトラブルを防ぐ
ws.EnableCalculation = True
MsgBox “エラーが発生しました。再計算を有効に戻しました。”
End Sub

応用・注意点

1. ブック保存時の注意点:EnableCalculationをFalseにした状態でブックを保存して閉じると、次に開いたときにはプロパティはTrueに戻りますが、計算結果が「保存した当時のまま」で止まっていることがあります。必ずマクロの最後でTrueに戻す運用を徹底してください。
2. Application.Calculationとの違い:似た機能に「Application.Calculation = xlCalculationManual」がありますが、これはブック全体の設定を変更します。特定のシートのみを対象にしたい場合は、今回のEnableCalculationプロパティを使うのが最も安全で効率的です。
3. 使用シーンの選定:単純な転記処理であれば、そもそも数式を値として貼り付ける、あるいは最後に一括で計算させる設計にするなど、根本的な改善と組み合わせることで、さらに高いパフォーマンスを発揮します。

タイトルとURLをコピーしました