この記事で分かること
- モデルを重くする5大犯人(揮発性関数・全列参照・条件付き書式の増殖ほか)
- 今日からできる処方箋——計算モードの運用と「重い箇所」の特定方法
- 設計段階で重さを予防する考え方
なぜ遅くなるのか:再計算の連鎖
Excelはセル変更のたびに、依存関係をたどって必要な再計算を行います。モデルが遅いのは「計算量×再計算の頻度」が大きいから——つまり対策は①1回の計算を軽くする、②無駄な再計算を減らすの2方向です。
5大犯人と処方箋
| 犯人 | 処方箋 |
|---|---|
| ①揮発性関数(OFFSET・INDIRECT・TODAY・NOW・RAND系) | 何か変更があるたびに毎回再計算される。OFFSET→INDEXへ、INDIRECT→直接参照や構造の見直しへ。TODAYは基準日セル(手入力)に置換 |
| ②全列参照(A:A)×検索関数の多用 | SUMIFS/COUNTIF/MATCHの範囲を実データ範囲(またはテーブル)に限定。行数×関数数で効いてくる |
| ③条件付き書式の増殖 | コピペで断片化したルールを棚卸し(運用ルール)。適用範囲を必要ブロックに限定 |
| ④配列計算・スピルの広域化 | 巨大範囲のSUMPRODUCT・配列数式を、補助列+単純関数に分解する方が速いことが多い |
| ⑤使用範囲の膨張・不要な書式 | Ctrl+Endで最終セルを確認し、余分な行列を削除して保存。ファイルサイズと再計算範囲を圧縮 |
運用の技術:手動計算とデータテーブル
- 計算モードの使い分け:重いモデルでは計算オプションを「自動(データテーブル以外)」にするのが定石。感応度テーブル(構築手順)はモデル全体を表のマス目分だけ再計算するため、最大の負荷源です。提出前にF9で必ず固まり直す——値が古いまま提出する事故(チェックリスト#8)とセットで管理します。
- 重い箇所の特定:シートを1枚ずつ退避して再計算時間を比べる二分法(デバッグと同じ発想)が確実です。数式タブの「再計算実行」で計測しながら絞り込みます。
- 64bit環境・メモリ:環境側の話は最後の手段。まず数式の構造を疑うのが順序です。
設計での予防
- 計算は一度だけ:同じ計算(例:年度キーの判定)を各行で繰り返さず、判定行を1本作って全行から参照する——重複計算の排除は速度と可読性を同時に上げます。
- 明細とモデルを分ける:数万行の明細はデータブックに分離し、モデルには集計結果だけを渡す(ピボットでの前処理)。1ブック主義にこだわらない。
- リンクの最小化:外部ブックへのリンクは遅さと事故(#10)の両方の源。値化して取り込む運用に。
Q. どこから手を付けるのが最も効果的ですか?
A. 経験的には①揮発性関数の駆逐と②全列参照の限定で大半が解決します。次に感応度テーブルの枚数を絞る(使わない表は範囲ごと削除)。それでも重ければ二分法で犯人シートを特定してください。
Q. 手動計算にしたら数値の更新を忘れそうで怖いです。
A. だから「自動(データテーブル以外)」が推奨です。通常の再計算は自動のまま、最重量級のデータテーブルだけF9運用になります。提出前チェックリストに「F9→チェック行0確認」を入れれば、忘れは仕組みで防げます。
まとめ
- 対策は「1回を軽く」×「回数を減らす」。犯人は揮発性関数・全列参照・書式増殖・広域配列・膨張範囲。
- 計算モードは「自動(データテーブル以外)」+提出前F9。重い箇所は二分法で特定。
- 設計で予防:計算は一度だけ・明細は分離・外部リンクは値化。
実務Excel教材(投資銀行フォーマット)
読んで分かったら、次は手を動かす番です。本記事の内容を実務形式のExcelで組み上げるための教材を用意しています。
本記事について
本文中の数値例はすべて理解のための設例であり、実在の企業・案件とは関係ありません。制度・実務慣行に触れる箇所は一般的傾向の整理です。個別案件への適用時は必ずその時点の一次情報・専門家にご確認ください。