Application.Calculation
と Application.Calculate
は、どちらも Excelの再計算に関わるVBAの構文ですが、役割はまったく異なります。以下にそれぞれの機能と違いをわかりやすく解説します。
🔷 ざっくりした違い
機能 | Application.Calculation | Application.Calculate |
---|
種別 | プロパティ(設定) | メソッド(処理実行) |
役割 | 「再計算の方法」を設定 | 「今すぐ再計算」を実行 |
例 | 自動 or 手動の設定 | 手動モードでも数式を即計算 |
型 | Enum(定数) | 実行のみ(戻り値なし) |
🔷 それぞれの詳しい説明
✅ Application.Calculation(設定するもの)
Excelの再計算のモード(自動か手動か)を設定・取得します。
設定可能な値:
値(定数) | 説明 |
---|
xlCalculationAutomatic | セルの変更時に自動的に再計算(通常モード) |
xlCalculationManual | セルを変更しても再計算されず、手動で再計算が必要 |
xlCalculationSemiautomatic | データテーブルの再計算を除いて自動で再計算 |
使用例:
' 再計算モードを手動に設定
Application.Calculation = xlCalculationManual
✅ Application.Calculate(実行するもの)
すべての開いているブックのすべてのワークシートに対して、再計算を実行します。
通常は、手動モードにしていたときや、強制的に再計算したいときに使います。
使用例:
' 現在のすべての数式を再計算する
Application.Calculate
🔷 実例での違い
Sub 再計算の違い例()
' ① 手動計算モードに設定(再計算は止まる)
Application.Calculation = xlCalculationManual
' セルに関数を入れても再計算されない
Range("A1").Formula = "=NOW()"
' ② 明示的に再計算を行う(この時点で初めて NOW() が実行される)
Application.Calculate
' ③ 自動に戻す
Application.Calculation = xlCalculationAutomatic
End Sub
🔷 補足:似ているけど違うプロパティ・メソッド
名前 | 種別 | 説明 |
---|
Application.Calculation | プロパティ | 再計算の方法(手動/自動)を設定 |
Application.Calculate | メソッド | すぐに再計算を実行 |
Worksheet.Calculate | メソッド | 特定のワークシートのみ再計算 |
Range.Calculate | メソッド | 特定のセル範囲のみ再計算 |
Application.CalculateFull | メソッド | すべての依存関係を完全再構築して計算 |
🔷 まとめ:違い一覧
比較項目 | Application.Calculation | Application.Calculate |
---|
種別 | プロパティ | メソッド |
機能 | 計算モードの設定(自動/手動) | 計算の実行 |
よく使う目的 | パフォーマンス最適化のため手動に切り替え | 手動モード時に必要な再計算を実行 |
戻り値 | XlCalculation (列挙型) | なし |
設定値 | xlCalculationAutomatic など | なし(その場で再計算) |
対象 | グローバル(Excel全体) | グローバル(すべての開いているブック) |
✅ よくある組み合わせ
Sub パフォーマンス最適化処理()
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
.EnableEvents = False
End With
' ---- 重い処理 ----
Worksheets("Sheet1").Range("A1:A1000").Formula = "=RAND()"
' ---- 明示的に再計算 ----
Application.Calculate
' 元に戻す
With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
✅ どちらを使うべきか?
目的 | 使うもの |
---|
自動 or 手動で計算を切り替えたい | Application.Calculation |
すぐに再計算を実行したい | Application.Calculate |