Applicationメソッド Application.Calculate

Application

Application.Calculateは、Excel VBAにおける Application オブジェクトのメソッドで、すべての開いているワークブック内のワークシートの再計算を強制的に実行するために使用します。

これは、手動計算モードで数式の更新が止まっているときや、即時に最新の結果を得たい場合に使われます。


🔷 基本構文

Application.Calculate

🔷 用途・目的

  • Excel全体の数式を再計算したいとき
  • 手動計算モードのとき、マクロで明示的に再計算したいとき
  • 外部リンクや依存関係のある関数があるとき
  • パフォーマンスのために一時的に自動計算を停止していた場合の再計算

🔷 計算対象

メソッド計算対象
Application.Calculate開いているすべてのブック・すべてのワークシートの数式
Workbook.Calculate指定したブックの全ワークシート
Worksheet.Calculate指定したシート内の数式
Range.Calculate指定したセル範囲のみ

🔷 使用例①:全シート再計算

Sub 再計算_全体()
Application.Calculate
End Sub

🔷 使用例②:手動計算モードとの併用

Sub 手動で制御する計算()
' 計算モードを手動に設定
Application.Calculation = xlCalculationManual

' 何らかのデータ処理
Range("A1").Formula = "=NOW()"

' 明示的に再計算
Application.Calculate

' 元に戻す(自動計算)
Application.Calculation = xlCalculationAutomatic
End Sub

🔷 自動計算 vs 手動計算

計算モード設定特徴
自動xlCalculationAutomatic値が変わるとすぐ再計算される(通常)
手動xlCalculationManualセルを変更しても自動では計算されない
セル依存xlCalculationSemiautomaticテーブルやデータモデルは計算されない

手動モード時、再計算を行うには Application.CalculateSheet.Calculate自分で呼ぶ必要があります


🔷 パフォーマンスの観点

大量データを扱うマクロ処理の中では、次のような処理順でパフォーマンスを向上できます:

Sub 高速処理()
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With

' 大量データ処理
' ...

' 再計算を明示的に行う
Application.Calculate

With Application
.Calculation = xlCalculationAutomatic
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub

🔷 関連メソッド・プロパティ

メソッド / プロパティ機能
Application.Calculate全ブック全シートの再計算
Workbook.Calculate特定ブックの再計算
Worksheet.Calculate特定シートの再計算
Range.Calculateセル範囲単位での再計算
Application.CalculateFull依存関係をすべて再構築して完全再計算
Application.Calculation計算モード(自動/手動)を設定・取得

🔷 Application.Calculate と CalculateFull の違い

メソッド名内容
Application.Calculate依存関係に基づいて再計算(通常の再計算)
Application.CalculateFull依存関係をすべて再構築して再計算(重いが完全)
Application.CalculateFullRebuildさらに構造自体も再構築(壊れた参照に対応)

🔷 まとめ

項目内容
メソッド名Application.Calculate
対象開いているすべてのブック、すべてのワークシート
用途手動計算時の再計算、マクロで明示的な再計算を行いたいとき
注意点重いファイルでは処理時間がかかることがある
よくある用途パフォーマンスチューニング、再計算のタイミング制御

✅ よく使うテンプレート

Sub 再計算する()
If Application.Calculation = xlCalculationManual Then
Application.Calculate
End If
End Sub
タイトルとURLをコピーしました