Excelで数式を入力した直後に、「1つ以上の循環参照が発生しています」というメッセージが表示されることがあります。
メッセージを閉じてもセルの値は0のままで、思ったとおりに計算できない状態になります。
これが循環参照エラーです。
循環参照は、数式が自分自身の計算結果を参照してしまったときに起こります。
Excelは答えを出すために元の値を必要としますが、その元の値がまだ決まっていません。
そのため計算を進められず、警告を出したうえで結果を0として扱います。
エラーの見た目は同じでも、原因はいくつかのパターンに分かれます。
自分のセルを数式に含めたケースや、SUM関数の範囲がずれているケースが代表的です。
複数のセルをまたいで参照が一周していることもあります。
この記事では、循環参照エラーが出る原因を3つに分けて整理します。
あわせて、原因のセルを探すやり方と、実務で再発させないための確認ポイントも紹介します。
どのパターンかが分かれば、直し方はそれほど難しくありません。
循環参照は、数式の仕組みそのものに関わるエラーです。
数式の入力ルールやエラーが出る原因の基本から確認したい方は、次の記事もあわせて参考にしてください。
循環参照とは?Excelでエラーメッセージが表示される原因
循環参照とは、数式が最終的に自分自身のセルを参照している状態のことです。
Excelは参照先の値を読み取ってから計算しますが、その参照先が計算結果そのものだと読み取る値がありません。
この行き止まりの状態をExcelが検知し、警告を出すのが循環参照エラーです。
#VALUE!や#REF!のようなエラーは、セルにエラー値そのものが表示されます。
一方で循環参照の場合、セルには0が表示されることが多く、見た目ではエラーだと気づきにくいのが特徴です。
画面下部のステータスバーに「循環参照」と表示されるかどうかが、判断の手がかりになります。
循環参照エラーのメッセージには何が書かれているか
次のような売上の表で考えてみます。
| A | B | |
|---|---|---|
| 1 | 項目 | 金額 |
| 2 | 商品A | 1200 |
| 3 | 商品B | 800 |
| 4 | 合計 |
B4に次の数式を入力したとします。
=SUM(B2:B4)
B4は合計を表示するセルですが、SUM関数の範囲にB4自身が含まれています。
確定すると循環参照の警告メッセージが表示され、B4には0が表示されます。
本来なら2000と表示されるはずの合計が、計算されないまま止まった状態です。
循環参照になる数式の共通点
もう1つ、1つのセルだけで起きる例を見てみます。
| A | B | |
|---|---|---|
| 1 | 項目 | 値 |
| 2 | 在庫数 | 10 |
B2に次の数式を入力します。
=B2+1
これはB2の値に1を足す数式ですが、足す対象のB2は数式自身が入っているセルです。
確定すると循環参照の警告が出て、B2には0が表示されます。
「今の値に1を足して上書きしたい」という考え方は、Excelの数式では成立しません。
どちらの例も、数式の参照先をたどると出発点のセルに戻ってきます。
参照が一周して閉じているかどうかが、循環参照かどうかの判断基準です。
数式が長くても複雑でも、この一周を見つければ原因は特定できます。
循環参照でもファイルが壊れない理由とセル参照の確認
循環参照の警告が出ても、ブックが壊れたりデータが消えたりすることはありません。
Excelは該当する計算を止めているだけで、他のセルの値はそのまま保持されます。
実務では、慌てて閉じる前に警告に表示されたセル番地を控えておくと復旧が早くなります。
初心者がつまずきやすいのは、警告メッセージを閉じた後に何も起きないように見える点です。
メッセージは一度閉じると再表示されないため、0のまま放置してしまうことがあります。
ステータスバーの左下に「循環参照: B4」のようにセル番地が残るので、そこを確認する習慣をつけると見落としを防げます。
循環参照を読み解くには、セル参照の基本を押さえておくと理解が早くなります。
絶対参照と相対参照の違いが分かると、数式をコピーしたときに参照先がどう動くかも予測しやすくなります。
循環参照の原因①|数式に自分自身のセル参照が含まれている
最も多い原因は、数式を入力したセル自身を、その数式の中で参照しているケースです。
直接循環参照と呼ばれ、参照が1つのセルだけで完結しているため比較的見つけやすい形です。
警告メッセージに表示されるセル番地と、問題のある数式が入ったセルが一致します。
自分自身のセル参照を含む数式の具体例
消費税を求める表で考えてみます。
| A | B | |
|---|---|---|
| 1 | 項目 | 金額 |
| 2 | 本体価格 | 10000 |
| 3 | 消費税 |
B3に次の数式を入力したとします。
=B3*0.1
消費税を求めたいのに、掛け算の対象が自分自身のB3になっています。
確定すると循環参照の警告が表示され、B3には0が表示されます。
正しくは、本体価格が入っているB2を参照します。
=B2*0.1
この数式に直すと、B3には1000と表示されます。
本体価格10000円に対する消費税10%を求める計算です。
手数料の計算でエラーが起きやすい数式のパターン
次は手数料を求める表です。
| A | B | |
|---|---|---|
| 1 | 項目 | 金額 |
| 2 | 売上 | 50000 |
| 3 | 手数料率 | 0.03 |
| 4 | 手数料 |
B4に次の数式を入力すると、正しく計算されます。
=B2*B3
B4には1500と表示されます。
売上50000円に手数料率3%を掛けた金額です。
ところが、手数料を引いた後の金額をB4に上書きしようとして次のように入力すると、循環参照になります。
=B4-B2*B3
差し引く前の金額をB4から取り出そうとしていますが、B4はこれから計算する結果そのものです。
このように「今の値から引く」「今の値に足す」という発想で数式を書くと、直接循環参照になりやすくなります。
実務では、同じセルに手入力の値を入れたり数式を入れたりを繰り返すうちに起きることが多いと考えられます。
手入力した金額の上から数式を入れ直すと、元の値は数式に置き換わって消えてしまいます。
計算前の値と計算結果は別のセルに分けて持つのが、再発を防ぐ基本の形です。
初心者がつまずきやすいのは、数式の中で自分のセルを指していることに気づかない点です。
数式バーを見ても、どのセルに入力中なのかは意識しないと分かりません。
数式バー左側の名前ボックスに表示されているセル番地と、数式内のセル参照を見比べると確認できます。
循環参照の原因②|SUM関数の範囲に合計セルが入っている
2つ目に多い原因が、SUM関数などの範囲指定に、合計を表示するセル自身が含まれているケースです。
ドラッグで範囲を選ぶときに1行分多く選んでしまうと起こります。
数式の書き方自体は正しく見えるため、範囲の端だけがずれている点に気づきにくい形です。
SUM関数の範囲指定ミスで起きるエラーの例
日付ごとの売上表で考えてみます。
| A | B | |
|---|---|---|
| 1 | 日付 | 売上 |
| 2 | 9月1日 | 12000 |
| 3 | 9月2日 | 9500 |
| 4 | 9月3日 | 14000 |
| 5 | 合計 |
B5に次の数式を入力したとします。
=SUM(B2:B5)
範囲の終わりがB5になっており、合計を表示するB5自身が含まれています。
確定すると循環参照の警告が表示され、B5には0が表示されます。
正しくは、データが入っているB2からB4までを指定します。
=SUM(B2:B4)
この数式に直すと、B5には35500と表示されます。
3日分の売上12000・9500・14000を合計した金額です。
列全体を指定した数式でエラーになるケース
数量を集計する表でも同じことが起こります。
| A | B | |
|---|---|---|
| 1 | 商品 | 数量 |
| 2 | 商品A | 5 |
| 3 | 商品B | 8 |
| 4 | 商品C | 3 |
| 5 | 合計 |
B5に次の数式を入力します。
=SUM(B:B)
列全体を指定する書き方ですが、B列には合計欄のB5も含まれます。
そのため合計セル自身が範囲に入り、循環参照の警告が表示されます。
範囲をB2からB4までに限定した次の数式であれば、B5には16と表示されます。
=SUM(B2:B4)
商品A・商品B・商品Cの数量5・8・3を合計した値です。
実務では、行を追加するたびにSUM関数の範囲を広げる作業が発生します。
そのときに合計行まで一緒に選んでしまうのが典型的なパターンです。
合計行はデータ範囲の1行下に置き、範囲は必ずデータの最終行で止めると安全です。
初心者がつまずきやすいのは、オートSUMボタンに任せきりにしてしまう点です。
オートSUMは範囲を自動で入れてくれますが、表の形によっては意図しない範囲が選ばれます。
確定する前に、点滅する枠線が合計セルを含んでいないか必ず見るようにします。
循環参照の原因を切り分けるには、SUM関数の範囲指定のルールそのものを理解しておくと早くなります。
SUM関数の基本的な書き方や範囲の指定方法は、次の記事で詳しく紹介しています。
循環参照の原因③|複数のセルをまたいで参照が一周している
3つ目は、2つ以上のセルが互いを参照し合い、参照が一周してしまうケースです。
間接循環参照と呼ばれ、1つの数式だけを見ても問題が見つからないため特定に時間がかかります。
B4→B2→B4のように、たどっていくと出発点に戻る形になっています。
間接循環参照が起きる数式の流れ
請求金額を計算する表で考えてみます。
| A | B | |
|---|---|---|
| 1 | 項目 | 金額 |
| 2 | 小計 | |
| 3 | 送料 | |
| 4 | 合計 |
B2、B3、B4にそれぞれ次の数式を入力したとします。
B2:=B4-B3
B3:=B4*0.05
B4:=B2+B3
B4はB2とB3を参照し、そのB2はB4を参照しています。
参照をたどるとB4からB2を経由してB4に戻るため、循環参照の警告が表示されます。
3つのセルはいずれも0と表示され、金額が計算されません。
この表では、小計を数式ではなく実際の数値で持たせれば解消します。
B2に20000と入力したうえで、B3とB4に次の数式を入力します。
B3:=B2*0.05
B4:=B2+B3
するとB3には1000、B4には21000と表示されます。
小計20000円と送料1000円を足した請求金額です。
2つのセルが互いを参照し合うエラーの例
税抜価格と税込価格を並べた表でも起こります。
| A | B | |
|---|---|---|
| 1 | 税抜価格 | 税込価格 |
| 2 |
A2とB2に、それぞれ次の数式を入力したとします。
A2:=B2/1.1
B2:=A2*1.1
税抜から税込を、税込から税抜を求める数式です。
どちらも相手を参照しているため、参照はA2からB2を経てA2に戻ります。
確定すると循環参照の警告が表示され、A2とB2はどちらも0になります。
どちらか一方に実際の金額を数値で入力すれば解消します。
A2に10000と入力すると、B2には11000と表示されます。
税抜価格10000円に消費税10%を加えた税込価格です。
参照元のトレースでセル参照の流れを確認する手順
原因のセルが見つからないときは、Excelの機能で参照をたどれます。
「数式」タブの「エラーチェック」の右にある矢印をクリックし、「循環参照」を選びます。
すると、循環参照が起きているセル番地の一覧が表示されます。
表示されたセルを選び、同じ「数式」タブの「参照元のトレース」をクリックします。
そのセルが参照しているセルへ矢印が引かれ、参照の流れが目で追えるようになります。
矢印をたどって出発点に戻ってくる箇所を見つければ、原因は特定できます。
実務では、複数のシートにまたがって参照が一周していることもあります。
その場合、ステータスバーにセル番地が表示されず「循環参照」とだけ出ることがあります。
シートを1枚ずつ開いて探すより、エラーチェックの循環参照一覧から確認したほうが早いと考えられます。
初心者がつまずきやすいのは、原因のセルを消せば直ると考えて数式を削除してしまう点です。
削除すれば循環参照は消えますが、必要な計算まで失われます。
まずは参照の一周を断ち切る箇所を決め、そこだけを実際の数値入力に置き換えるのが安全です。
参照をたどる作業では、シート上の数式を一覧できると確認が早くなります。
Ctrl+Shift+@を押すと、数式をまとめて画面に表示できます。
こうしたショートカットキーを覚えておくと、確認作業の時間を短縮できます。
循環参照エラーの対処法まとめ|数式の参照範囲を見直せば直せる
循環参照エラーは、数式が自分自身の計算結果を参照しているときに表示されます。
原因は3つに分かれますが、どれも参照が一周している点は共通しています。
順番に確認していけば、初心者の方でも原因を絞り込めます。
まず、警告メッセージやステータスバーに表示されたセル番地を控えます。
次にそのセルの数式を開き、自分自身のセル参照が含まれていないかを見ます。
含まれていなければ、SUM関数などの範囲の端が合計セルまで伸びていないかを確認します。
それでも見つからない場合は、「数式」タブのエラーチェックから循環参照の一覧を表示します。
参照元のトレースで矢印をたどり、どこで一周しているかを特定します。
一周している箇所のうち1か所を実際の数値入力に置き換えれば、計算は再開します。
Excelには「反復計算を有効にする」という設定があり、循環参照を許容したまま計算を繰り返すこともできます。
ただしこれは、意図的に循環させる特殊な計算のための設定です。
原因を隠す目的で使うと誤った数値に気づけなくなるため、まずは数式を直すほうが安全だと考えられます。
再発を防ぐには、入力用のセルと計算結果のセルを分けて表を作るのが基本です。
合計行はデータ範囲の1行下に置き、範囲指定はデータの最終行で止めます。
この形を守るだけで、循環参照エラーの大半は避けられると考えられます。
循環参照は、SUM関数のような基本的な関数でも起こります。まず覚えたい関数と使い方を一通り確認しておくと、数式のトラブル全般に対応しやすくなります。






