Menu

Excelの循環参照: 場所の探し方と直し方

循環参照は、B7に入力した=SUM(B2:B7)のように、直接またはほかの数式を通して自分のセルを参照する数式です。Excelは警告を出して0を表示し、そのセルを 数式 > エラーチェック > 循環参照 に表示します。

このページのシートはすべて実際に動きます。数値や数式を変えると再計算されます。

循環参照は、直接またはほかの数式を通して自分のセルを参照する数式です。B7に=SUM(B2:B7)と入力すると循環参照になります。合計が自分自身を含んでしまうからです。Excelは警告を表示してセルに0を入れ、数式 > エラーチェック > 循環参照にそのセルを表示します。直すには、範囲を数式のセルの手前で止めます。ここでは=SUM(B2:B6)です。

B7:  =SUM(B2:B7)    circular: B7 is inside its own range, Excel shows 0
B7:  =SUM(B2:B6)    fixed: the range stops above the total
自分の手前で止まる合計
B7
AB
1MonthSales
2Jan120
3Feb95
4Mar140
5Apr110
6May130
7Total595
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

B7をクリックしてください。色付きの枠がB2:B6を囲み、合計の上で止まっています。これは何よりもよくある循環参照です。たいていは、合計のすぐ上に行を挿入してSUMの範囲を手で1行広げすぎたときか、マウスで範囲をドラッグして合計のセルまで含めてしまったときに起こります。

循環参照があるとExcelはどうするか

数式を入力すると、Excelは「1つ以上の循環参照が発生しています。循環参照では、数式が自身のセルを直接、または間接的に参照しています。このため、計算が正しく行われない可能性があります。」というメッセージを表示します。OKをクリックすると数式はそのまま残り、0(またはそれまでの値)を表示します。その後は:

  • そのシートがアクティブな間、ウィンドウの下のステータスバーに循環参照: B7(ループの中の1つのセルの番地)と表示されます。
  • 作業を続けてもExcelはメッセージを繰り返さないので、循環参照はステータスバーだけを手がかりに、気づかれないままブックに残ることがあります。
  • そのセルに依存するほかの数式は0を使うので、その先の合計はエラーなしに間違ったものになります。

同じブックをGoogleスプレッドシートで開くと、「循環依存が検出されました」という注記付きで#REF!が表示されます。

Excelで循環参照を探す方法

  1. ステータスバーを読みます。アクティブなシートのセルが表示されます。番地がなく循環参照とだけ表示されているなら、ループは別のシートにあります。
  2. 数式 > エラーチェックの横の小さな矢印をクリックし、循環参照にマウスを合わせます。サブメニューにループの中のセルが一覧になります。1つをクリックすると選択されます。
  3. セルを選択した状態で数式 > 参照元のトレースを使うと、そのセルが読んでいるセルから矢印が引かれます。出発点に戻ってくるまで矢印をたどります。トレース矢印の削除で矢印を消せます。
  4. Macでも同じ場所にあります。数式タブのエラーチェック、次に循環参照です。

一覧に表示されたセルを直したら、もう一度一覧を確認してください。ブックには複数のループがあることがあり、1つ目がなくなるとExcelは次のループを表示します。

間接的な循環参照

2つ以上のセルを通るループは、どの数式も自分のセルに触れていないので見つけにくくなります。

C2:  =B2*10%      tax on the net price in B2
B2:  =D2-C2       net price = total minus tax
D2:  =B2+C2       total = net plus tax

どの数式ももっともに見えますが、B2はC2を、C2はB2を必要とし、D2は両方を必要とします。3つの値のどれか1つは入力でなければなりません。実際にわかっている数値を決めて入力し、ほかはそこから計算します:

ループのない税抜価格、税、合計
C2
ABCD
1ItemNet priceTax (10%)Total
2Desk$240.00$24.00$264.00
3Chair$85.00$8.50$93.50
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

税抜価格を入力し、税と合計はそこから出します。机は税24.00込みで24.00込みで264.00です。代わりに合計がわかっているなら、税抜価格は=D2/(1+10%)です。数式を未知の値について解いているので、自分を参照するものはありません。

自分を含む合計に対する割合

合計に対する割合の列は、合計が割合の列まで足していたり、合計の行が割合の割る範囲の中にあったりすると循環します。

合計に対する割合
C2
ABC
1RegionSalesShare
2North42042%
3South31031%
4East18018%
5West909%
6Online00%
7Total1000100%
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

各割合はB7で割り、B7はB2:B6だけを足しています。Onlineは何も売れなかったので割合は0%で、C7は割合を足して100%になります。B7が=SUM(B2:B7)や=SUM(B2:C6)だったら、どの割合も自分自身に依存していたはずです。$B$7の$は、数式を下にコピーしても合計を固定します。パーセントを参照してください。

自分の行を指す残高の累計

累計では、新しい金額をそれぞれ1つ上の行の残高に足します。同じ行の残高を指すとループになります。

C3:  =C3+B3    circular
C3:  =C2+B3    previous balance plus this row's amount
残高の累計
C3
ABC
1DateAmountBalance
22026-03-01500500
32026-03-04-120380
42026-03-09-80300
52026-03-15250550
62026-03-22-60490
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

最初の残高は最初の金額そのものです。その後の行はどれも、自分の金額を1つ上の行に足します。残高は最後に490になります。C4をクリックすると、色付きの枠はC3とB4を示し、C4自身を示すことはありません。

手数料を引いた後の利益に対する手数料

循環参照の中には打ち間違いではなく、本当に自分の結果に依存する計算もあります。利益の10%を手数料とし、その利益が手数料を払った後の残りである場合です。

B5 (commission):  =B6*B4         10% of profit
B6 (profit):      =B2-B3-B5      revenue minus cost minus commission

反復計算をオンにすると(ファイル > オプション > 数式 > 反復計算を行う、MacではExcel > 環境設定 > 計算方法)、Excelは数値が落ち着くまでループを繰り返します。ここではそれでも動きますが、ブックの中のうっかりできたループもすべて隠してしまい、落ち着かないループもあります。方程式を解くほうがよい方法です。手数料が「売上から原価と手数料を引いたもの」に率を掛けた値なら、手数料は「売上から原価を引いたもの」に率を掛け、1に率を足したもので割った値です。

ループのない手数料
B5
AB
1ItemValue
2Revenue$50,000.00
3Cost$30,000.00
4Rate10%
5Commission
6Profit$20,000.00
7Rate of profit$2,000.00
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

やってみよう: B5に、B5もB6も参照せずに手数料を書いてください。手数料は手数料を引いた後の利益の10%で、計算すると(売上から原価を引いたもの)に率を掛け、1に率を足したもので割った値になります。

B5が正しければ、B7(利益の10%)はB5の手数料と等しくなり、どちらも$1,818.18を表示します。この一致こそ、循環参照の方法が目指していた条件です。

よくある質問

Excelの循環参照とは何ですか?

計算するために自分自身の結果を必要とする数式です。B7の=SUM(B2:B7)のように自分のセルを参照する場合も、A1の=B1+1とB1の=A1*2のようにほかのセルを通して自分にたどり着く場合もあります。Excelは計算を終えられないので、警告を出して0か最後の値を表示します。

Excelで循環参照を探すには?

ウィンドウの下にあるステータスバーを見ます。循環参照の後にセル番地が表示されます。または 数式 > エラーチェック(横の矢印)> 循環参照 を開くと、セルの一覧が表示され、クリックするとそのセルに移動します。

循環参照があると表示されるのに見つからないのはなぜですか?

ステータスバーはアクティブなシートの循環参照しか表示しないので、シートを切り替えながらそれぞれで 数式 > エラーチェック > 循環参照 を確認してください。定義された名前や別のシートのセルを通るループもあるので、一覧のセルから参照元のトレースを使ってたどります。

循環参照を直すために反復計算をオンにすべきですか?

ある値に収束するモデルのように、ループが意図したものであるときだけです。ファイル > オプション > 数式 > 反復計算を行うをオンにすると、Excelは警告する代わりに計算を最大100回繰り返します。うっかりできたループでは間違いを隠すことになり、結果が正しくないことがあります。

Coddyのプログラミング言語のイラスト

Coddyでコードを学ぼう

始める