【Excel VBA】手動計算モードでも保存直前に必ず再計算を実行させる方法

数式が大量に含まれる重いExcelファイルでは、動作を軽快にするために計算方法を「手動」に設定することがよくあります。しかし、この設定には「再計算(F9キー)を忘れて、古いデータのまま上書き保存してしまう」という大きなリスクが伴います。

VBAを使えば、このヒューマンエラーを防ぎ、手動計算モードの快適さと、データの正確性を両立させることが可能です。この記事では、ブックのCalculateBeforeSaveプロパティを使い、安全な運用を実現する方法を解説します。


目次

手動計算モードの課題

まず、VBAで計算方法を手動に切り替えるのは簡単です。 Application.Calculation = xlCalculationManual

これにより、セルに値を入力するたびに発生していた再計算が抑制され、ブックの動作が非常にスムーズになります。しかし、前述の通り、最後にF9キーなどで再計算をしないまま保存すると、計算結果が更新されていない古いデータがファイルに残ってしまいます。


解決策: .CalculateBeforeSave プロパティ

この課題を解決するのが、Workbookオブジェクトが持つ.CalculateBeforeSaveというプロパティです。これは、そのブックの「保存前に再計算を行うかどうか」を設定するTrue/Falseのフラグです。

  • myBook.CalculateBeforeSave = True: 保存する直前に、Excelがこのブックの完全な再計算を自動的に実行します。
  • myBook.CalculateBeforeSave = False (既定値): 保存時にも再計算は行われず、表示されているデータのまま保存されます。

このプロパティをTrueに設定しておくことで、ユーザーが再計算を忘れても、Excelが最後の砦として計算を実行してくれるため、常に正しい値が保存されるようになります。


完成したVBAコード

この設定は、ブックを開いたときに自動で適用されるのが最も効果的です。そのため、以下のコードは**ThisWorkbookモジュール**のWorkbook_Openイベントに記述します。

' ThisWorkbookモジュールに記述します
Private Sub Workbook_Open()

    ' アプリケーション全体の計算方法を手動に設定
    ' これにより、データ入力中の再計算が抑制され、動作が軽快になる
    Application.Calculation = xlCalculationManual
    
    ' このブックの「保存前に計算」オプションをオンにする
    ' これにより、手動計算モードでも、保存時には必ず最新の計算結果が反映される
    Me.CalculateBeforeSave = True
    
    ' 設定が完了したことをユーザーに通知(任意)
    MsgBox "このブックは「手動計算モード」で開かれました。" & vbCrLf & _
           "(保存する際には、自動的に再計算が実行されます)", vbInformation
           
End Sub

コードのポイント解説

① Workbook_Openイベントへの記述

このコードをThisWorkbookモジュールのWorkbook_Openイベント内に記述することで、ユーザーがこのファイルを開くたびに、自動的に計算モードが「手動」に、そして「保存前再計算」が「オン」に設定されます。これにより、設定のし忘れがなくなり、常に意図した動作を保証できます。

② Application.Calculation と ThisWorkbook.CalculateBeforeSave

  • Application.Calculationは、Excelアプリケーション全体に影響するグローバルな設定です。
  • Me.CalculateBeforeSave(またはThisWorkbook.CalculateBeforeSave)は、このブックにのみ影響するローカルな設定です。

この2つを組み合わせることで、「作業中はサクサク軽く、保存時だけは確実に計算する」という理想的な環境を、このブック限定で実現できます。

③ ユーザーへの通知

MsgBoxでの通知は任意ですが、ユーザーが「入力しても計算結果が変わらない」と混乱するのを防ぐため、「このブックは手動計算モードですよ」と最初に伝えてあげるのは親切な設計と言えるでしょう。


まとめ

大規模なExcelブックを安全かつ快適に運用するための黄金の組み合わせは、以下の通りです。

  1. Application.Calculation = xlCalculationManual を設定して、編集中のパフォーマンスを向上させる。
  2. ThisWorkbook.CalculateBeforeSave = True を設定して、計算忘れによるデータ不整合のリスクを排除する。

この2つの設定をWorkbook_Openイベントに記述しておくことで、ヒューマンエラーに依存しない、堅牢なファイル運用が可能になります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次