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.Calculate
や Sheet.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