循環参照エラーが出たときの対処法

数式を確定させた瞬間に「循環参照に関する警告」というダイアログが出て、セルの値が0になったり、計算が止まったりしたことはないでしょうか。ほかのエラーのように#から始まる記号が表示されるわけではないため、何が起きているのか分かりにくいトラブルです。結論から言うと、循環参照エラーは数式が直接または間接的に自分自身のセルを参照してしまい、計算が無限にループする状態を指します。この記事では、循環参照が起こる3つの典型パターンと、見つけ方・直し方を解説します。

目次

循環参照エラーの意味とほかのエラーとの違い

循環参照は、数式が計算しようとしている結果を出すために、その計算結果自身を材料として必要としてしまう状態です。参照先のセルが削除されて起こる#REF!エラーの原因と直し方は「参照先が消えてなくなる」トラブルですが、循環参照は逆に「参照が自分自身のところまで戻ってきてしまう」トラブルです。表示のされ方も異なり、#REF!や#DIV/0!のようにセルに記号が表示されるのではなく、数式を確定した瞬間にダイアログで警告されるのが循環参照の特徴です。

循環参照が起こる3つのパターン

次のような担当者別の売上表(A1:B5)を例に見ていきます。A列が担当者、B列が売上、5行目に合計を出したいとします。

A(担当者) B(売上)
2 佐藤 300000
3 鈴木 450000
4 田中 220000
5 合計

1. 合計を出すセルの範囲に、そのセル自身を含めてしまう

A列が担当者、B列が売上の表で、B5に合計を出す数式を入れるとします。ここでうっかり合計行まで範囲に含めて次のように書いてしまうケースが最も多いパターンです。

=SUM(B2:B5)

この数式はB5セル自身に入力されているのに、範囲B2:B5にB5自身が含まれています。「自分の値を求めるために自分の値が要る」という矛盾が生じるため、確定した瞬間に警告ダイアログが表示されます。正しくは、合計行を含めずに次のように書きます。

=SUM(B2:B4)

佐藤300,000+鈴木450,000+田中220,000で970,000が返ります。合計を出す行や列を後から挿入・移動したときに、範囲の終点だけがずれて合計セル自身を巻き込んでしまうことがあるため、フィルや挿入のあとは範囲の終点を必ず確認しましょう。

2. 別シートを経由した間接的な循環

同じシートの中だけでなく、シートをまたいだ参照でも循環は起こります。たとえば「集計」シートのB2が「明細」シートのC2を参照し、その「明細」シートのC2が「集計」シートのB2を参照していると、2つのシートを行き来する形の循環になります。同一シート内の自己参照と違って一目で気付きにくく、ブックが大きくなるほど発見が遅れがちです。

3. あえて反復計算を使うケース(上級者向け)

財務モデルなどでは、支払利息が平均借入残高から決まり、その平均借入残高が当期純利益(=支払利息を差し引いた後の数値)から決まる、というように意図的に循環する計算を組むことがあります。この場合はファイル>オプション>数式>「反復計算を行う」にチェックを入れ、最大反復回数と変化の閾値を指定することで、警告を出さずに収束計算させられます。ただし、この設定を有効にすると本来ミスであるはずの循環参照まで警告なしで通ってしまうため、意図した設計だと自信を持って言えない限りはオフのままにしておくのが安全です。

循環参照の見つけ方・直し方

  • 警告ダイアログが出たらまずそのセルを直す: ダイアログの「OK」を押すと0が入った状態で確定されるため、そのままそのセルの数式を見直します。
  • ダイアログを閉じてしまった場合: 「数式」タブ>「エラーチェック」の▼>「循環参照」から、警告の原因になっているセルの一覧にジャンプできます。
  • ステータスバーでも確認できる: 循環参照を含むセルを選択している間、画面左下のステータスバーに「循環参照: セル番地」と表示されます。
  • 直し方の基本は「範囲から自分自身を外す」こと: 合計行と集計範囲を分ける、あるいは集計結果を別のセルに逃がすことで解消します。

よくあるエラー・注意点

  • IFERRORでは隠せない: 循環参照はセルに記号が返る「エラー値」ではなく警告ダイアログのため、IFERROR関数の対象になりません。数式自体を直す以外に解決方法はありません。
  • ファイルを開いた瞬間に警告が出た場合: 前回保存時に誰かが気付かないまま循環参照を含んだ状態で保存した可能性があります。開いてすぐの警告は放置せず、その場で該当セルを確認しましょう。
  • 反復計算をオンにしたまま忘れると危険: 一度オンにすると、以降は別の場所で新たに循環参照のミスをしても警告が出なくなります。意図した計算が終わったらオフに戻す習慣をつけましょう。
  • 名前の定義を使った数式は原因箇所が追いにくい: セル範囲に名前を付けて数式を組んでいると、参照が名前の中に隠れるため、循環している箇所を目で追うのが難しくなります。
  • 参照がコピペで意図せずずれた結果、自分自身を含んでしまうこともある: フィルやコピーで参照範囲がずれ、結果的に合計セル自身を含んでしまうケースはコピペで参照がずれてしまう問題の直し方(絶対参照$の使い方)でも触れている参照の固定($の使い方)を理解しておくと防ぎやすくなります。

まとめ

循環参照エラーは、数式が直接または間接的に自分自身のセルを参照してしまうことで起こります。もっとも多いのは合計を出すセルの範囲に自分自身を含めてしまうケースで、範囲の終点を1行減らすだけで解決します。別シートを経由した間接的な循環は気付きにくいため、「数式」タブのエラーチェックを活用しましょう。似たように「数式が動いていない」と感じたときは、セルに数式が表示されて計算されないときの直し方の症状(数式が文字列としてそのまま表示される状態)と混同しないよう切り分けることも大切です。

目次