📊 Excel VBA Top100
⚡

CalculateOnDemand

自動化

手動計算モードのブックを強制的に再計算します

Excelの計算モードを手動に設定した状態で、必要なときだけ指定した範囲または全シートの計算を実行するマクロです。大量の数式が含まれる重いファイルで、入力のたびに自動再計算が走って操作が遅くなる問題を解消します。ボタンをクリックしたときだけ再計算を行うことで、データ入力中のパフォーマンスを維持しながら、必要なタイミングで最新の計算結果を確認できます。内部ではApplication.Calculationプロパティを切り替えるか、Worksheet.Calculateメソッドで対象範囲だけを再計算する構成です。RunMacroOnAllSheetsのように複数シートへ処理を展開する仕組みと組み合わせれば、ブック全体を手動計算モードにしつつ必要なシートだけを選んで再計算するといった柔軟な運用も可能になります。

CalculateOnDemand デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: CalculateOnDemand を実行すると、全シートの数式が再計算されます

🎯 活用シーン

  • ✓数千行のVLOOKUP・INDEX/MATCH関数を含む重いファイルで、ボタンを押したときだけ計算を実行して操作性を改善したいとき
  • ✓複雑なシミュレーションモデルで、パラメーターをまとめて変更してから一括で計算結果を更新する運用を実現したいとき
  • ✓定期的なデータ更新タイミングが決まっているファイルで、更新ボタンを押したときだけ全シートを再計算するようにしたいとき
  • ✓外部データ連携を含む重いモデルで、データ取得後にまとめて一度だけ再計算したいとき
  • ✓何百件もの条件付き数式が並ぶ配賦計算シートで、入力中の動作を軽快に保ちたいとき

💡 実装のヒント

  • ▸手動計算モードに切り替えると、ファイルを閉じて再度開いても手動モードのままになります。他のユーザーが混乱しないよう、このマクロで計算後は自動モードに戻すよう設計することをお勧めします。
  • ▸Application.CalculationをxlCalculationManualに設定するとすべてのブックに影響します。特定のブックだけを対象にしたい場合はWorkbook.ForceFullCalculationを使用してください。
  • ▸計算が長時間かかる場合は進捗インジケーターを表示する処理を追加すると、ユーザーが待機中であることを把握しやすくなります。
  • ▸計算モードを手動にしたままファイルを保存すると、次回開いたユーザーにも手動モードが引き継がれるため、必ず終了時に自動モードへ戻す処理を入れてください。
  • ▸特定の範囲だけ再計算したい場合はWorksheet.Calculateではなく対象Rangeに対してCalculateメソッドを呼び出してください。

💻 VBAコード

' CalculateOnDemand
' -----------------
' Macro Name: CalculateOnDemand
' Description: 手動計算モードのブックを強制的に再計算します
' Parameters: なし
' Returns: なし
' Usage: CalculateOnDemand を実行すると、全シートの数式が再計算されます
' -----------------

Sub CalculateOnDemand()
    On Error GoTo ErrorHandler

    Application.Calculate
    MsgBox "再計算が完了しました", vbInformation, "完了"

    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました:" & vbCrLf & Err.Description, vbCritical, "エラー"
End Sub