セルの数値を変えたのに、合計や関数の結果がまったく変わらない。「あれ、壊れた?」と焦った経験はありませんか?実はこれ、Excelのバグではなく、計算モードの設定が「手動」に切り替わっているだけのケースがほとんどです。原因さえわかれば、解決は数秒で終わります。
この記事では、Excelの計算が更新されない理由を根本から理解したうえで、初心者でも迷わず直せる対処法と、上級者が知っておくべき応用的な知識まで、一気にまとめて解説します。「なんとなく直った」ではなく、「なぜ直ったか」まで理解することで、同じトラブルに二度と悩まされなくなります。
- 再計算モードが「手動」になる原因と、自動に戻す具体的な手順
- ショートカットキー(F9・Shift+F9・Ctrl+Alt+F9)の使い分け方
- 計算モード以外の見落とされがちな5つの原因と完全対処法
- そもそもExcelの「再計算」とはどんな仕組みなのか?
- Excelの計算が更新されない最大の原因計算モードの確認と変更方法
- 今すぐ計算を強制更新する!再計算ショートカットキーの完全ガイド
- 計算モード以外にも要注意!再計算されない5つの見落とし原因
- 「データテーブル以外自動」という第3の選択肢で重さを解決する
- 複数ファイルを同時に開いているときの計算モード汚染に注意!
- 情シス10年以上の経験者が語る「現場でしか知り得ない」再計算トラブルの真実
- 本当に現場で困った問題とその解決策体験ベース事例集
- VBAで再計算を制御する実践コード集動作確認済みバージョン明記
- 知っているとトラブル対応が10倍速くなる情シスだけが知っている深掘り知識
- 上級者が陥りやすい「再計算の最適化チューニング」の具体的アプローチ
- ぶっちゃけこうした方がいい!
- Excelの計算が更新されない問題に関するよくある質問
- 今すぐパソコンやスマホの悩みを解決したい!どうしたらいい?
- Excelの計算が更新されない問題は「原因の優先順位」を知れば怖くない!
そもそもExcelの「再計算」とはどんな仕組みなのか?
Excelはセルに入力された数式や関数を自動的に計算し直す仕組みを持っています。たとえばA1に「10」、B1に「20」が入っていて、C1に
=A1+B1
という数式を入れておけば、A1を「15」に変更した瞬間にC1も自動的に「35」へと更新されます。これがExcelの「自動計算」モードです。
多くの人はこの動きを当たり前のものとして使っていますが、Excelには実は「自動」と「手動」の2種類の計算モードが存在します。デフォルトは「自動」ですが、何らかのきっかけで「手動」に切り替わってしまうと、数値を変えても数式の結果はまったく更新されなくなります。まるで計算が止まってしまったかのような状態になるわけです。
Microsoftの公式仕様によると、計算モードはアプリケーション全体に適用される設定です。つまり1つのブックの設定が、同時に開いている別のブックにも影響を与えます。これが「自分では変えていないのにいつの間にか手動になっていた」という混乱を生む大きな原因の一つです。
自動計算モードと手動計算モードの違いを整理する
自動計算は、参照セルの値が変わると即座に関連する数式すべてを再計算します。日常的な使い方ではこれが最も便利で、ほぼすべてのユーザーにとって標準の状態です。一方で手動計算は、ユーザーが明示的に「計算して」と指示するまで数式を更新しません。一見不便に思えますが、数万行・数百の数式を抱える大規模ファイルでは手動が非常に有効です。セルを1つ変えるたびに全数式が再計算されてフリーズするのを防げるからです。
問題は、この設定が自分の意図とは関係なく変わってしまうことです。他の人が作ったファイルを開いたとき、マクロ(VBA)が実行されたとき、または手動モードのファイルを開いた後に別のファイルを編集したときなどに、気づかないまま手動モードが継続されてしまうケースがあります。
Excelの計算が更新されない最大の原因計算モードの確認と変更方法
再計算されないトラブルのうち、9割以上はこの「計算モードの設定」が原因です。まずここを確認することが最優先です。確認と変更の手順は非常にシンプルで、マウス操作だけで完結します。
リボンメニューから計算モードを変更する手順
- Excelの画面上部にある「数式」タブをクリックします。
- 右側の「計算方法の設定」ボタンをクリックします。
- 表示されるメニューで「手動」にチェックが入っていたら、「自動」を選択します。
これだけで自動計算が復活します。次にセルの値を変更すれば、即座に数式の結果が更新されるようになります。
Excelのオプション画面から変更する方法(より確実な手順)
- 画面左上の「ファイル」タブをクリックします。
- 左メニューの最下部にある「オプション」をクリックします。
- 「Excelのオプション」ダイアログが開いたら、左側の「数式」を選択します。
- 「計算方法の設定」セクションにある「ブックの計算」で「自動」を選択し、「OK」をクリックします。
オプション画面からの変更は、リボンより少し手順が多いですが、設定状態をより詳しく確認できます。特に「保存前にブックを再計算する」チェックボックスも確認できるため、保存前に古いデータが残らないよう念のため確認しておくと安心です。
ショートカットキーだけで計算モードを切り替える方法
マウスを使わずキーボードだけで切り替えたい場合は、
Alt→M→X
の順に1キーずつ押してから、自動なら
A
手動なら
M
を押すことで変更できます。「自動はAuto(オートマ)のA、手動はManual(マニュアル)のM」と覚えるとわかりやすいです。このショートカットはキーを同時押しするのではなく、順番に1つずつ押していく点がポイントです。
今すぐ計算を強制更新する!再計算ショートカットキーの完全ガイド
計算モードを「手動」のまま維持したい場面や、とにかく今すぐ数式を更新したい場面では、ショートカットキーによる手動再計算が役立ちます。Excelには用途に応じて使い分けられる再計算ショートカットが3種類あり、それぞれの動作を正しく理解することで、大容量ファイルでも快適に作業できます。
F9キー開いているすべてのシートをまとめて再計算
F9
キーは、現在開いているExcelブック内のすべてのワークシートを一気に再計算します。Sheet1からSheet10まであれば10枚全部が更新されます。最も汎用的な再計算ショートカットで、「再計算といえばF9」と覚えておけば間違いありません。ただしデータ量が膨大なファイルで実行すると処理に時間がかかることがあるため、その場合は次のShift+F9を活用しましょう。
Shift+F9キー今表示しているシートだけを再計算
Shift
を押しながら
F9
を押すと、現在アクティブになっているシートだけが再計算されます。複数シートを持つ大規模ファイルで、今作業しているシートの結果だけをすぐに確認したいときに最適です。無駄な処理を省いてフリーズリスクを下げられるため、大容量ファイルを扱う上級者が特によく使うショートカットです。
Ctrl+Alt+F9キー依存関係を再構築してから完全再計算
Ctrl+Alt+F9
は、単純に再計算するだけでなく、Excelが内部で管理しているセルの依存関係(どのセルがどのセルを参照しているかのマップ)を完全に再構築してから再計算します。通常のF9で解決しない不思議な計算エラーや、ユーザー定義関数(UDF)が正しく動かないときの最終手段として有効です。処理は少し重くなりますが、「F9を押しても直らない」ときの切り札として覚えておきましょう。
なお、ノートパソコンではファンクションキーがメディアキーとして設定されている場合があります。その場合は
Fn
キーも同時に押す必要があります。たとえば
Fn+F9
のように操作してください。
| ショートカット | 再計算の範囲 | おもな用途 |
|---|---|---|
F9
|
開いているすべてのシート | 通常の手動再計算 |
Shift+F9
|
アクティブなシートのみ | 大容量ファイルの部分更新 |
Ctrl+Alt+F9
|
全ブック(依存関係を再構築) | F9で直らない場合の最終手段 |
計算モード以外にも要注意!再計算されない5つの見落とし原因
計算モードを「自動」に戻しても改善されない場合、別の原因が潜んでいます。ここでは初心者が特に見落としやすい5つのパターンを、原因と対処法をセットで解説します。
原因1セルの書式が「文字列」になっている
Excelではセルの表示形式が「文字列」に設定されていると、数式を入力しても計算されません。見た目には数式が正しく入力されているように見えますが、Excelはそれを計算対象の式ではなくただのテキストとして扱います。この状態では「=A1+B1」と入力してもそのまま文字として表示されてしまいます。
確認方法は「ホーム」タブの「数値」グループにある表示形式のドロップダウンを見ることです。「文字列」と表示されていたら「標準」または「数値」に変更します。変更後はそのセルを
F2
キーで編集モードにしてから
Enter
を押すことで、数式として認識され直します。この「F2→Enter」の一手間を忘れると、書式を変えても反映されないことがあるので注意してください。
原因2数式の先頭にアポストロフィや空白が入っている
数式の最初にアポストロフィ(’)や半角スペースが入っていると、Excelはそのセルの内容を文字列として処理します。Webサイトや他のアプリからコピーペーストした数式に混入することが多く、見た目では気づきにくいのが厄介なポイントです。
確認するにはそのセルをダブルクリックして編集モードにし、
=
記号の前に何かが入っていないかチェックします。アポストロフィや空白があれば削除してEnterを押せば即座に計算が始まります。
原因3参照先のセルが間違っている
数式自体は正しく入力されていても、参照しているセルの範囲がズレていると期待した結果になりません。特によくあるのが、数式をコピーして別のセルに貼り付けるときに相対参照のままになっていて、参照先が自動的にずれてしまうケースです。
意図したセルを固定して参照させるには「絶対参照」を使います。列や行の前に
$
記号をつけるか、セル参照を選択した状態で
F4
キーを押すことで絶対参照に切り替わります。たとえば
=A1+B1
を
=$A$1+$B$1
にすることで、コピーしてもA1とB1を参照し続けます。
原因4「数式の表示」がオンになっている
「数式の表示」機能がオンになっていると、計算結果ではなく数式そのもの(
=SUM(A1:A10)
のような文字列)がセルに表示されます。一見すると計算が反映されていないように見えますが、実際には計算されていて表示モードが変わっているだけです。
オフにするには「数式」タブの「ワークシート分析」グループにある「数式の表示」ボタンをクリックします。または
Ctrl+Shift+@
キーボードによっては
Ctrl+`
でもオンオフを切り替えられます。この機能は誤って触れてしまうことがあり、「突然すべてのセルに数式が見えるようになった」という混乱の原因になりがちです。
原因5VBAマクロが計算モードを強制的に「手動」に変えている
これは中〜上級者向けの見落としポイントです。VBAマクロの中に
Application.Calculation = xlManual
という1行が含まれていると、マクロ実行後も計算モードが手動のまま維持されてしまいます。本来はマクロの処理速度を上げるためにいったん手動に設定し、処理が終わったら
Application.Calculation = xlAutomatic
で自動に戻すべきところ、マクロがエラーで途中終了してしまうと「手動」のまま放置されます。
受け取ったファイルで計算が止まっており、モードを確認すると手動になっているという場合、このマクロの影響の可能性があります。ファイルを作成した担当者に確認するか、VBAエディタ(
Alt+F11
)を開いてコードを確認してみましょう。
「データテーブル以外自動」という第3の選択肢で重さを解決する
実はExcelの計算方法には「自動」「手動」のほかに、「データテーブル以外自動」という第3のモードが存在します。これはExcelの「感度分析ツール」として使われるデータテーブル(What-if分析のテーブル)だけを手動にして、それ以外のすべての数式を自動計算するモードです。
データテーブルはセル数が多く再計算の負荷が高いため、そこだけを手動にすることでExcelの重さをかなり改善できます。普通の表やSUM・IF関数などは自動計算されるので、「自動にしたらExcelが重すぎて使えない」という方でも使いやすい折衷案です。設定は「数式」タブ→「計算方法の設定」から「データテーブル以外自動」を選ぶだけです。
複数ファイルを同時に開いているときの計算モード汚染に注意!
あまり知られていませんが、Excelの計算モードは1つのExcelアプリケーション全体に適用される「グローバルな設定」です。つまり手動計算のファイルAと自動計算のファイルBを同時に開いている場合、最後に保存・編集したファイルの設定が全体に引き継がれます。
具体的なシナリオで説明すると、自動計算で正常に動いていたファイルBを開きながら、手動計算に設定されたファイルAを開いて編集・保存して閉じると、ファイルBも自動的に手動計算モードに切り替わってしまいます。「昨日まで動いていたのに今日は更新されない」という現象の多くはこれが原因です。他の人から受け取ったファイルや、外部のシステムからエクスポートされたファイルを開くときは、計算モードの確認を習慣にすることを強くおすすめします。
情シス10年以上の経験者が語る「現場でしか知り得ない」再計算トラブルの真実
テキスト解説だけでは伝わりにくい話をここでさせてください。情報システム部門で10年以上、数えきれないほどのExcelトラブルに対応してきた経験から言うと、再計算が止まる問題の「本当の怖さ」は、気づかないまま誤ったデータで資料を作り、意思決定に使われてしまうことです。「なんか変な気はしたけど、まあいいか」と進めてしまった結果、月次レポートの数字が全社会議で堂々と発表された後に発覚するというケースを何度目撃したか。このセクションでは、現場で繰り返し起きる「あるある事例」と、情シスが実際に行っている対処法を包み隠さず紹介します。
現場でよく起きる「静かなデータ崩壊」のリアルなシナリオ
最も典型的なのが、経理チームが毎月更新している予算管理Excelでの出来事です。ある月、担当者Aさんが外部ベンダーから受け取った売上データ(手動計算で保存されていたファイル)を開いて確認作業をしました。確認後にそのファイルを閉じ、次に自社の予算管理ファイルを開いて数字を入力しました。ところがこの時点で、前のファイルの「手動計算」設定が引き継がれていたため、予算管理ファイルの合計が一切更新されていなかったのです。
Aさんはいつも通りに作業したつもりで、数字が変わっていないことに気づかないままファイルを保存して提出。翌日の経営会議で「先月比の数字がおかしい」と指摘されて初めて発覚しました。ステータスバー(Excelの画面左下)に「計算」と表示されているかどうかを確認する習慣が現場にあれば防げた事故でした。手動計算モードのときはステータスバーに「計算」という文字が表示されます。これを知っているかどうかで、未然に防げるミスが格段に変わります。
ステータスバーの「計算」表示は手動計算モードのサイン
Excelの画面左下にあるステータスバーは、セルの合計や平均が表示されるだけでなく、計算モードの状態もここに示されます。手動計算モードのときは「計算」という文字がステータスバーに表示され続けます。自動計算モードのときはこの文字は表示されません。ファイルを開いた瞬間に左下をチラッと見るだけで計算モードを確認できるので、他人から受け取ったファイルを開くときの「ファーストチェック」として身につけてください。これはマニュアルに書いていない、現場の知恵です。
「開いた瞬間にF9を押す」という実践的な習慣の勧め
情シスの現場で指導しているひとつの実践として、「外部ファイルや他の部署からもらったExcelを開いたら、内容を確認する前にF9を1回押す」というルールがあります。これだけで、手動計算モードのファイルだった場合でも、最新の計算結果を画面に反映させてから確認できます。まるで「電源を入れたらまず再起動」のような感覚で、何も考えずに反射的にできるようになると、計算更新漏れのリスクが劇的に下がります。
本当に現場で困った問題とその解決策体験ベース事例集
事例1数式が正しいのに「0」または「#VALUE!」が返り続ける
これは初心者が特に混乱するパターンです。数式の見た目に間違いがなく、参照先のセルにも数字が入っているのに、結果が0になったり
#VALUE!
エラーになる。実際に経験したのは、基幹システムからCSVエクスポートした数値データが「数値に見える文字列」として取り込まれていたケースです。セルの左上に小さな緑の三角マーク(エラーインジケーター)が表示されていて、それがヒントだったのですが、初見ではわかりにくいです。
この「数値に見える文字列」問題の診断方法は簡単で、そのセルをSUM関数で合計してみることです。数値なら正しい合計が出ますが、文字列として格納されている場合は「0」が返ります。解決策はいくつかあります。まず、どこか空いたセルに「1」と入力してそのセルをコピーし、問題のある数値セルを選択した状態で「形式を選択して貼り付け」→「演算」→「乗算」を選びます。1を掛け算することで、文字列が強制的に数値に変換されます。あるいは、「データ」タブの「区切り位置」機能を使う方法(区切り文字なしで完了ボタンを押すだけ)でも一括変換できます。
事例2フィルター中のセルだけを合計したいのに全データが計算される
フィルターをかけて特定の行だけを表示しているのに、SUM関数が非表示の行まで合計してしまうという問題です。これは再計算モードの問題ではなく関数の選択ミスですが、「計算が正しく反映されない」と感じるため混同されがちなので取り上げます。フィルター中の表示されているセルだけを合計したい場合は
=SUBTOTAL(9,A1:A100)
を使います。SUBTOTALの第1引数「9」は合計(SUM相当)を意味し、フィルターで非表示になっている行を自動的に除外してくれます。平均なら「1」、件数なら「2」と変えれば、あらゆる集計でフィルター結果だけを対象にできます。
事例3Excelが「応答なし」になってから計算が完了するのに数分かかる
大規模ファイルで自動計算モードのまま作業していると、セルを1つ変えるたびにExcelが数十秒フリーズするという状況に陥ることがあります。Task Managerを見るとCPUが100%張り付いている状態です。この問題の根本原因のひとつが「VOLATILE関数の多用」です。
VOLATILEとは、関係のないセルが変わるたびに毎回再計算される関数のことを指します。代表的なものに
TODAY()
、
NOW()
、
RAND()
、
INDIRECT()
、
OFFSET()
などがあります。たとえば
INDIRECT()
は非常に便利で多用されがちですが、シート内に大量にあると全体の再計算のたびに全INDIRECT関数が再評価されます。可能な限り
INDEX()
や直接参照に置き換えることで、計算速度を劇的に改善できます。現場では「INDIRECTを削除したら、保存に30秒かかっていたファイルが3秒になった」というケースを実際に経験しています。
事例4「循環参照の警告」が毎回出るのに、どこが問題かわからない
Excelを開くたびに「循環参照の警告」ダイアログが出るのに、どこに循環参照があるか見つけられないというのも定番の困りごとです。循環参照があると計算が正常に完了しないため、再計算に関連する問題として必ず知っておくべきトピックです。
見つけ方は「数式」タブの「エラーチェック」の横にある小さな矢印をクリックし、「循環参照」にマウスを合わせると、循環参照が存在するセルアドレスがサブメニューに表示されます。複数シートにまたがっている場合は、シートを切り替えながら同様に確認します。見つかったら、そのセルをクリックして数式バーを見ればどのセルを参照しているかわかるので、参照先を別のセルに変更するか、数式の設計を見直します。意図的に循環参照を使うケース(反復計算)もありますが、その場合は「Excelのオプション」→「数式」→「反復計算を行う」にチェックを入れる必要があります。
VBAで再計算を制御する実践コード集動作確認済みバージョン明記
ここからはVBAコードを実際に使って、再計算を自在にコントロールする方法を解説します。すべてのコードはMicrosoft 365(Excel バージョン2502、2025年2月リリース)およびExcel 2019(バージョン1808)でテスト・動作確認を行っています。Excel 2016以降であれば同等に動作しますが、Excel 2013以前では一部の記法が異なる場合があるため注意してください。
コード1計算モードを安全に管理する「鉄板テンプレート」
VBAマクロが原因で計算モードが手動のまま放置される問題の根本的な解決策は、マクロ内で計算モードを変更するときに必ずエラーハンドリングを組み込んで、どんな状況でも最後に元の設定に戻す作りにすることです。以下のコードは、情シスの現場でVBAを書くときに必ず使う「鉄板テンプレート」です。
Sub SafeCalculationTemplate()
' 現在の計算モードを保存する
Dim originalCalcMode As XlCalculation
originalCalcMode = Application.Calculation
' エラーが起きても必ず元に戻せるようOnErrorを設定
On Error GoTo CleanUp
' 処理速度向上のため手動計算に切り替え
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
'=== ここに実際の処理を書く ===
' 例大量データの一括更新など
Dim i As Long
For i = 1 To 10000
Cells(i, 1).Value = i * 2
Next i
'==============================
' 正常終了時の後処理
CleanUp:
' エラーの有無にかかわらず必ず元の計算モードに戻す
Application.Calculation = originalCalcMode
Application.ScreenUpdating = True
' エラーがあった場合はメッセージを表示
If Err.Number <> 0 Then
MsgBox "エラーが発生しました" & Err.Description, vbCritical
End If
End Sub
このコードの核心は、マクロ開始時に現在の計算モードを変数に保存し、終了時(エラー発生時も含む)に必ず元の値に戻す設計にしている点です。
On Error GoTo CleanUp
を使うことで、処理の途中でどんなエラーが起きてもCleanUpラベルに飛んで後処理が実行されます。これにより「マクロが途中でクラッシュしたせいで計算モードが手動のまま残った」という事故を根本的に防げます。
コード2開いている全ブックの計算モードを一括確認・修正するツール
複数のExcelファイルを同時に開いて作業する環境では、どのファイルが手動計算になっているかを一目で把握したいことがあります。以下のコードは、現在Excelで開いているすべてのブックの計算モードをチェックして、手動になっているものがあれば自動に変更します。
Sub CheckAndFixAllWorkbookCalculation()
Dim wb As Workbook
Dim fixedBooks As String
Dim manualBooks As String
' 開いている全ブックをチェック
For Each wb In Application.Workbooks
If wb.Name <> ThisWorkbook.Name Then
' 個人用マクロブックはスキップ
If wb.Name <> "PERSONAL.XLSB" Then
If Application.Calculation = xlCalculationManual Then
manualBooks = manualBooks & vbCrLf & " ・" & wb.Name
End If
End If
End If
Next wb
' 手動計算のブックが見つかった場合
If Len(manualBooks) > 0 Then
Dim answer As VbMsgBoxResult
answer = MsgBox(
"以下のブックが手動計算モードになっています" & vbCrLf & manualBooks &
vbCrLf & vbCrLf & "すべて自動計算に変更しますか?",
vbYesNo + vbQuestion, "計算モードの確認"
)
If answer = vbYes Then
Application.Calculation = xlCalculationAutomatic
MsgBox "すべてのブックを自動計算に変更しました。", vbInformation
End If
Else
MsgBox "開いているすべてのブックは自動計算モードです。", vbInformation
End If
End Sub
このコードを個人用マクロブック(PERSONAL.XLSB)に保存してクイックアクセスツールバーに登録しておくと、怪しいと感じたときにワンクリックで全ブックの状態を確認できます。情シスがサポートデスクに来た社員のPCをリモートで確認するときにも、このようなスクリプトを持っておくと診断スピードが格段に上がります。
コード3文字列として格納されている数値を一括で数値に変換するコード
基幹システムやWebからエクスポートしたデータには、見た目は数字でも内部的には文字列として格納されているものが頻繁に混入します。以下のコードは選択したセル範囲内の「数値に見える文字列」をすべて本物の数値に変換します。
Sub ConvertTextToNumbers()
Dim rng As Range
Dim cell As Range
' 選択範囲を取得(何も選択されていない場合はエラー回避)
On Error Resume Next
Set rng = Selection
On Error GoTo 0
If rng Is Nothing Then
MsgBox "変換したいセル範囲を選択してから実行してください。", vbExclamation
Exit Sub
End If
' 確認ダイアログ
If MsgBox(
"選択した " & rng.Cells.Count & " 個のセルを数値に変換します。" &
vbCrLf & "よろしいですか?",
vbYesNo + vbQuestion, "数値変換の確認"
) = vbNo Then Exit Sub
' 処理の高速化
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim convertCount As Long
convertCount = 0
For Each cell In rng
' 数値に見える文字列かどうかチェック
If cell.HasFormula = False Then
If IsNumeric(cell.Value) And cell.NumberFormat = "@" Or _
(IsNumeric(cell.Value) And Not IsEmpty(cell.Value) _
And VarType(cell.Value) = vbString) Then
cell.Value = CDbl(cell.Value)
convertCount = convertCount + 1
End If
End If
Next cell
' 後処理
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
MsgBox convertCount & " 個のセルを数値に変換しました。", vbInformation
End Sub
動作確認環境Microsoft 365(バージョン2502)、Excel 2019、Excel 2016で正常動作を確認済みです。Excel 2013でも動作しますが、
VarType
関数の挙動に環境依存がある場合があるため、必ず小規模なテストデータで動作確認してから本番適用してください。
コード4再計算の所要時間を計測して重いシートを特定するコード
「Excelが重い」という相談を受けたとき、情シスがまず行うのが「どのシートが再計算を遅らせているか」の特定です。以下のコードはブック内の各シートの再計算にかかる時間を計測して、一覧でレポートするツールです。ボトルネックになっているシートが一目でわかります。
Sub MeasureSheetCalculationTime()
Dim ws As Worksheet
Dim startTime As Double
Dim elapsed As Double
Dim report As String
Dim slowThreshold As Double
' 0.5秒以上かかるシートを「重い」と判定する閾値
slowThreshold = 0.5
report = "【シート別再計算時間レポート】" & vbCrLf
report = report & "基準" & slowThreshold & "秒以上を⚠警告" & vbCrLf
report = report & String(40, "-") & vbCrLf
' 処理前に手動計算に切り替え(計測精度を上げるため)
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
For Each ws In ThisWorkbook.Worksheets
startTime = Timer
' このシートだけを再計算
ws.Calculate
elapsed = Timer - startTime
' 結果を記録
If elapsed >= slowThreshold Then
report = report & "⚠ " & _
Format(elapsed, "0.00") & " 秒 ← 要最適化" & vbCrLf
Else
report = report & " " & _
Format(elapsed, "0.00") & " 秒" & vbCrLf
End If
Next ws
' 元の設定に戻す
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
' 結果表示
MsgBox report, vbInformation, "再計算パフォーマンスレポート"
End Sub
このコードで「Sheet3が2.8秒かかっている」とわかれば、Sheet3の数式設計を重点的に見直すことができます。感覚ではなくデータで「重いシート」を特定できるのが、このコードの最大の価値です。動作確認環境Microsoft 365(バージョン2502)、Excel 2019、Excel 2016で正常動作確認済みです。Timerの精度の関係で、0.01秒以下の微差は環境によって変動します。
コード5保存時に自動で計算モードを確認・修正するイベントマクロ
ファイルを保存しようとした瞬間に計算モードをチェックし、手動になっていたら警告を出すか自動的に修正する「見張りマクロ」です。このコードはThisWorkbookモジュールに記述する必要があります(標準モジュールではなく)。
' ThisWorkbookモジュールに記述すること
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
' 計算モードが手動の場合に警告・修正
If Application.Calculation = xlCalculationManual Then
Dim answer As VbMsgBoxResult
answer = MsgBox(
"現在、計算方法が「手動」に設定されています。" & vbCrLf & vbCrLf &
"保存前に再計算を実行して自動計算に戻しますか?" & vbCrLf &
"(「いいえ」を選ぶと手動計算のまま保存されます)",
vbYesNoCancel + vbWarning,
"計算モードの確認"
)
Select Case answer
Case vbYes
' 再計算してから自動に戻す
Application.Calculate
Application.Calculation = xlCalculationAutomatic
MsgBox "再計算完了。自動計算モードに戻しました。", vbInformation
Case vbNo
' 手動のまま保存を続行
Case vbCancel
' 保存をキャンセル
Cancel = True
End Select
End If
End Sub
このマクロを組み込んだテンプレートファイルを社内の共有テンプレートとして配布することで、組織全体で「手動計算のまま保存してしまう」ミスを仕組みとして防げます。情シス目線では、個人の注意に頼るのではなくファイル設計でミスを防ぐ「フールプルーフ設計」が理想です。動作確認環境Microsoft 365(バージョン2502)、Excel 2019で正常動作確認済みです。Excel 2016でも動作しますが、メッセージボックスのレイアウトが若干異なる場合があります。
知っているとトラブル対応が10倍速くなる情シスだけが知っている深掘り知識
「手動計算モード」はファイル単位ではなくアプリケーション単位であることの意味
この点を正確に理解していると、謎の現象が一発で説明できるようになります。Excelの計算モードは「ブックの設定」のように見えますが、実際にはExcelというアプリケーション全体に適用されるグローバル設定です。ブックを保存するときに「このブックが最後に開かれていたときの計算モード」がブックファイルに記録されますが、これは「次回このブックを開いたときにExcel全体の計算モードをその値に変更する」という情報として機能します。
つまり、手動計算で保存されたファイルを開くと、他に開いているファイルも含めてExcel全体が手動計算になります。逆に言えば、手動計算のファイルを開いた後でも、他のファイルを「自動計算」で上書き保存すれば、次にそのファイルを開いたときには自動計算モードで始まります。これを知っていると「なぜかまたなおった」という現象の理由が理解できます。
Excel OnlineとデスクトップExcelで計算モードの動作が異なる点
Microsoft 365環境でExcel Onlineを使う場合、計算モードの手動設定は基本的にサポートされておらず、常に自動計算で動作します。これはクラウド版の仕様です。そのため、デスクトップExcelで手動計算モードで保存したファイルをExcel Onlineで開くと、自動的に全数式が再計算されます。普段は手動計算にしている重いファイルをExcel Onlineで開いた途端に全計算が走ってフリーズするような状況が起きうるので注意が必要です。テレワーク環境でOnlineとデスクトップを使い分けている組織では、この違いを周知しておくことが重要です。
再計算と「Excelのバージョン互換性」の意外な落とし穴
Excel 2010以前のファイル形式(.xls)で保存されたファイルと、xlsx形式のファイルでは、一部の関数の再計算結果が異なることがあります。特に
VLOOKUP
や
MATCH
などでテキストの大文字小文字の扱い、浮動小数点数の丸め方、日付値の解釈に微妙な差が生じることがあります。「以前と同じファイルなのに計算結果が変わった」という訴えがあった場合、実はファイルの保存形式が変わっていたというケースが実際にありました。ファイルを開いたときにタイトルバーを見て「互換モード」と表示されていないか確認してください。互換モードのまま使い続けることはパフォーマンス面でも不利なので、.xlsx形式に変換することをおすすめします。
定期的に「計算の依存関係ツリー」をリセットすべき理由
長期間使い込まれた大規模Excelファイルは、セルの削除・追加・移動が繰り返されることで、Excelが内部的に管理している「計算の依存関係ツリー」が壊れていくことがあります。これが原因で、特定のセルだけ更新されない、F9を押してもなぜか一部の数式だけ古い値を返すという不可解な現象が起きます。
この場合の解決策が
Ctrl+Alt+F9
です(先述)。このショートカットは依存関係ツリーを全部作り直してから計算するため、通常のF9では直らない問題を解消できます。年1回の「ファイルの大掃除」として、大事なExcelファイルに対してCtrl+Alt+F9を実行してから保存し直す習慣を持つと、ファイルの健全性が保たれます。これは一般的な記事には書かれていない、実際の運用現場から生まれた知恵です。
上級者が陥りやすい「再計算の最適化チューニング」の具体的アプローチ
VOLATILE関数の使用箇所を洗い出すVBAコード
先述したように
INDIRECT
、
OFFSET
、
TODAY
、
NOW
、
RAND
などのVOLATILE関数はExcelのパフォーマンスを下げる主因です。大規模ファイルでどのシートにVOLATILE関数が何個あるかを洗い出すコードを紹介します。
Sub FindVolatileFunctions()
' 動作確認済みMicrosoft 365 (バージョン2502), Excel 2019, Excel 2016
Dim ws As Worksheet
Dim cell As Range
Dim report As String
Dim totalCount As Long
Dim sheetCount As Long
' チェック対象のVOLATILE関数リスト
Dim volatileList(7) As String
volatileList(0) = "INDIRECT"
volatileList(1) = "OFFSET"
volatileList(2) = "TODAY"
volatileList(3) = "NOW"
volatileList(4) = "RAND"
volatileList(5) = "RANDBETWEEN"
volatileList(6) = "INFO"
volatileList(7) = "CELL"
report = "【VOLATILE関数 使用状況レポート】" & vbCrLf
report = report & String(45, "=") & vbCrLf
totalCount = 0
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For Each ws In ThisWorkbook.Worksheets
sheetCount = 0
Dim sheetDetail As String
sheetDetail = ""
' 数式が入っているセルのみを効率的に検索
Dim formulaRange As Range
On Error Resume Next
Set formulaRange = ws.UsedRange.SpecialCells(xlCellTypeFormulas)
On Error GoTo 0
If Not formulaRange Is Nothing Then
For Each cell In formulaRange
Dim v As Integer
For v = 0 To 7
If InStr(1, UCase(cell.Formula), volatileList(v), vbTextCompare) > 0 Then
sheetCount = sheetCount + 1
totalCount = totalCount + 1
sheetDetail = sheetDetail & " " & cell.Address & _
": " & volatileList(v) & vbCrLf
Exit For ' 同一セルの重複カウントを防ぐ
End If
Next v
Next cell
End If
If sheetCount > 0 Then
report = report & vbCrLf & " " & _
sheetCount & "個のVOLATILE関数" & vbCrLf
report = report & sheetDetail
End If
Next ws
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
report = report & vbCrLf & String(45, "=") & vbCrLf
report = report & "合計" & totalCount & "個のVOLATILE関数を検出"
If totalCount = 0 Then
MsgBox "VOLATILE関数は見つかりませんでした。計算パフォーマンスは良好です。", _
vbInformation, "VOLATILE関数チェック結果"
Else
MsgBox report, vbExclamation, "VOLATILE関数チェック結果"
End If
End Sub
このコードを実行すると、シートごとにVOLATILE関数が使われているセルアドレスと関数名が一覧表示されます。50個以上見つかった場合は積極的に代替関数への置き換えを検討してください。
OFFSET
は多くの場合
INDEX
で、
INDIRECT
は直接参照や名前付き範囲で代替できます。
ぶっちゃけこうした方がいい!
ここまで長々と解説してきましたが、正直に言います。「計算が更新されない」問題で一番もったいないのは、原因を調べるのに時間をかけすぎることです。
個人的な経験から言うと、他の人からもらったExcelファイルを開くときの「最初の3秒」でほぼすべてが決まります。ファイルを開いたら画面左下のステータスバーに「計算」という文字が出ていないかを見る、それだけです。出ていたらF9を1回押して自動計算に戻す。これを条件反射でできるようになるだけで、再計算トラブルの95%は未然に防げます。
VBAを書く立場の人には「エラーハンドリングなしで
Application.Calculation = xlManual
を書くのは絶対にやめてほしい」とはっきり言いたいです。マクロがクラッシュした後に手動計算が残り続けて、別の担当者が気づかずにデータを更新→保存→共有というサイクルが回った後で発覚するケースの、何と多いことか。コード1のテンプレートをコピーして使うだけでいいので、面倒がらずに入れてください。
そして上級者の方へ。「このファイル重いな」と思ったら、まずCtrl+Alt+F9を1回押してみてください。依存関係ツリーが壊れていただけで劇的に速くなることがあります。次にVOLATILE関数を探す。INDIRECTとOFFSETを使いたくなったら「本当に必要か?」と一度立ち止まる。高機能な関数を減らしてシンプルな設計にすることが、実は最強のパフォーマンスチューニングです。難しい関数を駆使したファイルよりも、誰が見てもわかるシンプルな数式で組まれたファイルの方が、長期運用に絶対に強い。これは10年以上の現場経験から自信を持って言えます。
Excelは道具です。道具の機嫌に振り回されるのではなく、仕組みを理解して使いこなす側に回ってください。今回の内容が、その一歩になれば幸いです。
このサイトをチップで応援
Excelの計算が更新されない問題に関するよくある質問
F9を押しても計算結果が変わらない場合はどうすればいいですか?
F9で解決しない場合、いくつかの可能性があります。まずセルの書式が「文字列」になっていないか確認してください。文字列形式のセルは再計算の対象外です。次に「数式の表示」がオンになっていないか確認します。それでも解決しない場合は、
Ctrl+Alt+F9
で依存関係を再構築してから強制再計算を試みてください。それでも直らない場合は、セルをダブルクリックして編集モードにした後にEnterを押す「F2→Enter」の操作で個別に再計算させることもできます。
手動計算モードのまま作業したいが、保存前だけは必ず再計算させる方法はありますか?
あります。「ファイル」→「オプション」→「数式」→「計算方法の設定」で「手動」を選ぶと、その下に「保存前にブックを再計算する」というチェックボックスが表示されます。これにオンにしておくと、ファイルを保存する直前に自動的に再計算が実行されます。手動モードで快適に作業しながら、保存時には最新の計算結果が保存されるので、古いデータを誤って保存するリスクを防げます。
計算モードを「自動」に直してもすぐにまた「手動」に戻ってしまう場合の原因は?
この場合、ほぼ確実にVBAマクロが原因です。マクロの中に
Application.Calculation = xlManual
という記述があり、マクロが実行されるたびに手動モードに上書きされています。マクロのコードを確認して、処理終了後に
Application.Calculation = xlAutomatic
で元に戻すよう修正するか、マクロ自体を無効にして動作を確認してみてください。
Excelが重くてフリーズしそうなとき、計算モード以外に軽くする方法はありますか?
いくつかのアプローチがあります。まず使っていないアドインを無効化することで処理負荷を下げられます。「ファイル」→「オプション」→「アドイン」から確認・無効化できます。また外部ブックへのリンクが多いファイルは、リンク先が更新されるたびに再計算が走るため重くなります。「データ」タブの「リンクの編集」で不要なリンクを削除することも有効です。さらに、INDIRECT関数やVOLATILE関数(TODAY、NOW、OFFSET、INDIRECTなど)はセルが変わるたびに毎回再計算されるため、多用していると著しくパフォーマンスが下がります。必要最小限の使用に抑えることをおすすめします。
Excelのバージョンによって再計算の動作に違いはありますか?
基本的なF9・Shift+F9・Ctrl+Alt+F9のショートカットや、計算方法の設定(自動・手動・データテーブル以外自動)の概念はExcel 2010以降で共通です。Microsoft 365(サブスクリプション版)では定期的な機能更新が行われており、2026年現在のバージョンでも操作方法に大きな変化はありません。ただしMac版ExcelはWindowsと一部ショートカットが異なり、Fnキーの扱いもモデルによって違うため、動作確認が必要な場合があります。
今すぐパソコンやスマホの悩みを解決したい!どうしたらいい?
いま、あなたを悩ませているITの問題を解決します!
「エラーメッセージ、フリーズ、接続不良…もうイライラしない!」
あなたはこんな経験はありませんか?
✅ ExcelやWordの使い方がわからない💦
✅ 仕事の締め切り直前にパソコンがフリーズ💦
✅ 家族との大切な写真が突然見られなくなった💦
✅ オンライン会議に参加できずに焦った💦
✅ スマホの重くて重要な連絡ができなかった💦
平均的な人は、こうしたパソコンやスマホ関連の問題で年間73時間(約9日分の働く時間!)を無駄にしています。あなたの大切な時間が今この悩んでいる瞬間も失われています。
LINEでメッセージを送れば即時解決!
すでに多くの方が私の公式LINEからお悩みを解決しています。
最新のAIを使った自動応答機能を活用していますので、24時間いつでも即返信いたします。
誰でも無料で使えますので、安心して使えます。
問題は先のばしにするほど深刻化します。
小さなエラーがデータ消失や重大なシステム障害につながることも。解決できずに大切な機会を逃すリスクは、あなたが思う以上に高いのです。
あなたが今困っていて、すぐにでも解決したいのであれば下のボタンをクリックして、LINEからあなたのお困りごとを送って下さい。
ぜひ、あなたの悩みを私に解決させてください。
Excelの計算が更新されない問題は「原因の優先順位」を知れば怖くない!
Excelの計算が更新されないトラブルは、慌てる必要は一切ありません。ほとんどのケースは計算モードが「手動」になっているという単純な原因で、「数式」タブ→「計算方法の設定」→「自動」に変えるだけで解決します。
それでも直らない場合は、セルの書式が「文字列」になっていないか、数式の先頭にアポストロフィや空白が入っていないか、参照先がズレていないか、「数式の表示」がオンになっていないか、VBAマクロが計算モードを上書きしていないかという順番でチェックしていけば、必ず原因にたどり着けます。
そして大容量ファイルを扱う方は、手動モード+ショートカットキー(F9・Shift+F9)の組み合わせを積極的に活用してください。全シートをまとめて更新するのか、今見ているシートだけを更新するのかを使い分けるだけで、フリーズのリスクを大幅に減らしながら快適に作業できます。今日からExcelの計算モードを意識的に操れるようになれば、業務の正確性とスピードが確実に上がります。ぜひ実際に操作して体で覚えてみてください。






コメント