何が起きたのか
行または列を削除したところ、いくつかのセルに数値の代わりに #REF! が表示されるようになりました。これはExcelが、もはや存在しないセルを参照している数式を検出したことを意味します。エラーの全文は次のとおりです:
#REF! - The formula contains invalid cell references
朗報があります。原因さえわかれば、ほぼ5分以内に修正できます。
なぜこうなるのか
Excelは数式の参照を位置で追跡しています。=A1+B1 と書いてA列全体を削除すると、Excelはその参照を再ルーティングできず、代わりに #REF! を挿入して =#REF!+B1 という状態になります。
よくある原因:
- 数式が直接参照している行または列を削除した
- 他の数式が依存しているセル範囲に、別のセルを切り取って貼り付けた
- もはや存在しないアドレスをハードコードした
INDIRECT()を使用した - 相対参照が範囲外(例:行-1)になる位置に数式をコピーした
手順1 — #REF! セルをすべて探す
手動で探す必要はありません。Excelの検索機能を使えば、壊れた数式を数秒ですべて見つけられます。
- Ctrl+F を押して「検索」を開きます。
- 検索ボックスに
#REF!と入力します。 - すべて検索 をクリックします。ダイアログの下部に、影響を受けるすべてのセルが一覧表示されます。
- 任意の結果をクリックすると該当セルにジャンプします。Ctrlを押しながら複数の結果をクリックすると、一度にすべて選択できます。
キーボードのみで操作したい場合は、「ジャンプ」の「セル選択」を使います:
- Ctrl+G を押して → セル選択 をクリックします。
- 数式 を選択 → エラー 以外のチェックをすべて外す → OKをクリックします。
エラーのあるセルがすべてハイライトされます。
手順2 — 壊れた数式を確認する
#REF! のセルをクリックして数式バーを確認します。次のような内容が表示されます:
=SUM(A2:#REF!)
または
=VLOOKUP(D2,#REF!,2,FALSE)
#REF! トークンは、どの部分が壊れているかを正確に示しています。これにより、何が削除されたか、そして代替の参照先をどこに求めるべきかがわかります。
手順3 — 可能であれば元に戻す
直前に何かを削除した場合は、すぐに Ctrl+Z を押してください。それが最も早い回復手段です。ただし、まだファイルを保存していないことを確認してください。保存してしまうと、元に戻す履歴が消えてしまいます。復元後は、次回削除する前に数式を再構成できるよう、依存関係を把握しておきましょう。
手順4 — 参照を手動で修正する
元に戻せない場合は、ファイルが保存済みか、削除が意図的だったかのどちらかです。いずれの場合も、数式を自分で修正する必要があります。
例: 月次売上データが49行分入っていたB列を削除したとします。E列にある次のような数式が:
=SUM(B2:B50)
次のように表示されるようになりました:
=SUM(#REF!)
削除後、売上データはC列にシフトしました。修正方法:
=SUM(C2:C50)
セルをクリックして数式バーを直接編集し、#REF! を正しい範囲に置き換えてEnterを押します。
手順5 — 検索と置換で複数のセルをまとめて修正する
壊れた参照がすべて同じ新しい範囲を指す場合は、一括置換が効果的です。30個のセルの数式が同じ列を失っている場合、一度で修正できます:
- Ctrl+H を押して「検索と置換」を開きます。
- 検索する文字列 に壊れた部分を入力します。例:
#REF!またはSheet2!#REF!。 - 置換後の文字列 に正しい参照を入力します。例:
C2:C50。 - すべて置換 をクリックします。
注意: この方法が有効なのは、すべての数式が同じ形で壊れている場合のみです。セルごとに参照が異なる場合は、一つずつ修正してください。
手順6 — INDIRECT() の特殊なケースに対処する
INDIRECT() はテキスト文字列から参照を構築するため、Excelの自動更新機能を完全にバイパスします。次の数式を例に考えます:
=INDIRECT("Sheet2!B" & ROW())
Sheet2のB列を削除しても、Excelは文字列 "Sheet2!B" が古くなったことを認識しません。#REF! の警告は表示されず、数式は実行時に誤ったデータを返したりエラーになったりします。文字列を手動で更新する必要があります:
=INDIRECT("Sheet2!C" & ROW())
これが INDIRECT() を最終手段とすべき理由です。隠れた依存関係は壊れやすく、見つけにくいのです。
確認手順
修正を適用したら、簡単な動作確認を行いましょう:
- Ctrl+F を押して
#REF!を検索し、「一致するものが見つかりません」と表示されることを確認します。 - 修正したセルの値が期待通りかスポットチェックします。ゼロや不自然に大きな数値は、参照先が間違っている可能性があります。
- 名前付き範囲の場合:数式 → 名前の管理 を開き、「参照範囲」列を確認します。
#REF!が表示されている名前は削除または更新が必要です。
今後の予防策
次の3つの習慣を身につけることで、#REF! エラーを防ぐことができます。
セルアドレスの代わりに名前付き範囲を使う
数式 → 名前の定義 でデータ範囲に名前を付け、次のように記述します:
=SUM(SalesData)
以下のように書く代わりに:
=SUM(B2:B50)
シート全体を再配置しても、更新が必要なのは名前付き範囲の定義だけです。それを使っているすべての数式が自動的に調整されます。
テーブルを使う(Ctrl+T)
データ範囲をExcelテーブルに変換しましょう。[@[Sales]] のようなテーブル列参照は、データがどこに移動しても追従します。
=SUM(Table1[Sales])
一定の列構造を持つ構造化データには、これが最も信頼性の高いアプローチです。
削除前に依存関係を確認する
列や行を削除する前に、それをクリックして 数式 → 参照先のトレース を選択します。その列や行を参照しているすべての数式に青い矢印が表示されます。依存関係がある場合は、先に該当する数式を再構成してから削除しましょう。
覚えておくべきこと
#REF!は常に、削除または範囲外に移動した何かをExcelが追跡できなくなったことを意味します。数式バーを見れば、どの部分が壊れたか正確にわかります。- 削除直後のCtrl+Zが最速の回避手段です。保存前に使いましょう。
B2:B50のようなハードコードされたアドレスは壊れやすいものです。Excelテーブルと名前付き範囲が長期的な解決策です。INDIRECT()は厄介な存在です。実行時に何か問題が発生するまで警告が出ません。

