エラーの内容
=UNIQUE(A2:A100) や =FILTER(B2:B50, C2:C50="Active") のような数式を入力したとき、結果が表示される代わりに Excel が次のエラーを表示します:
#SPILL!
アンカーセルに破線の枠と警告アイコンが表示されます。ホバーすると 「スピル範囲が空白ではありません」 など、原因によって異なるメッセージが表示されます。
発生原因
動的配列数式(UNIQUE、FILTER、SORT、SEQUENCE、複数結果を返す XLOOKUP など)は、隣接するセルに自動的に結果をスピルします。数式は1つのセルに入力され、そこから下方向または右方向に結果が展開されます。
何かがその展開を妨げています。主な原因は以下のとおりです:
- スピル範囲内のセルにデータが存在する(スペース1文字でも対象になります)
- スピルのパス上に結合セルがある
- 数式が Excel テーブル(
ListObject)内にある(テーブルはスピルを完全にブロックします) - 出力配列が大きすぎて、行 1,048,576 または列 XFD を超えてしまう
- 数式がサイズ未解決の別の動的配列を参照している(まれですが発生します)
手順ごとの修正方法
手順 1 — 障害となっている要素を特定する
#SPILL! が表示されているセルをクリックします。Excel がスピルの予定範囲を青い破線の枠で囲みます。その範囲内に異常なものがないか確認してください。
より速い方法:警告アイコンをクリックして 「障害となっているセルを選択」 を選びます。Excel が問題のセルに直接ジャンプしてハイライト表示します。
手順 2 — 障害となっているデータを削除する
スピル範囲内に不要なデータが見つかった場合は、該当セルを選択して Delete キーを押します。エラーが即座に解消され、数式の出力が表示されます。
目に見えないスペース文字に注意してください。これはサイレントキラーです。空白に見えるセルに誤って入力された " " が含まれている場合があります。検索と置換(Ctrl+H)を使って、検索フィールドにスペースを入力し、置換フィールドを空のままにして、対象範囲で実行してください。
手順 3 — スピルをブロックしている結合セルを解除する
結合セルと動的配列数式は相性が悪いです。スピルのパス上に結合セルがある場合:
- 結合セルを選択します。
- ホーム → 配置 → セルを結合して中央揃え → セル結合の解除 に進みます。
- 内容を再フォーマットまたは移動してから、数式が解決されたか確認します。
手順 4 — 数式を Excel テーブルの外に移動する
Excel テーブル(Ctrl+T)はスピルをサポートしていません。アーキテクチャ上の制約です。数式のアンカーがテーブル内にある場合、2つの方法で対応できます:
- 数式を切り取り(Ctrl+X)、テーブルの境界外の任意のセルに貼り付けます。
- またはテーブル全体を通常の範囲に変換します:テーブルを右クリック → テーブル → 範囲に変換。
どちらの方法でも、数式が通常のセルに置かれれば問題なくスピルします。
手順 5 — 範囲外スピルを修正する
47,000 行目に入力した =SEQUENCE(2000) は 49,000 行目まで書き込もうとしますが問題ありません。しかし 47,576 行目に入力するとシートの上限に達します。2つの対処法があります:
- 数式をより上の行(または列方向にスピルする数式の場合は左の列)に移動します。
INDEXで出力を制限します:
-- 元の数式:
=SEQUENCE(2000)
-- 最初の500件に制限:
=INDEX(SEQUENCE(2000), SEQUENCE(500))
手順 6 — 循環する動的配列参照を解消する
2つの動的配列数式が互いを参照し合い、どちらも先に解決できない場合があります。これによりサイズが確定できないスピルが発生し、Excel が処理できなくなります。LET を使って依存関係を断ち切りましょう:
-- 問題のある例: 別のスピル数式を参照する FILTER
=FILTER(A2:A100, B2:B100=UNIQUE(C2:C100))
-- 修正: LET で内部結果を安定させる
=LET(
uniqueCategories, UNIQUE(C2:C100),
FILTER(A2:A100, COUNTIF(uniqueCategories, B2:B100))
)
修正を確認する方法
#SPILL!の表示が消え、下または右のセルに結果が表示されている。- アンカーセルをクリックすると、スピル範囲の周囲に薄い青色の枠が表示される(正常な動作です)。
- スピル範囲内のアンカー以外のセルをクリックすると、数式バーに数式がグレーアウトして表示される。直接編集できないことで、スピルが正常に機能していることを確認できます。
- ソースデータに新しい行を追加すると、スピル範囲が自動的に拡張されます。再入力の必要はありません。
#SPILL! を事前に防ぐ方法
- あらかじめ空白スペースを確保する:
=FILTER()が多い日に200行を返す可能性があるなら、数式の下に250行分の空きを確保しておきましょう。少しのバッファで多くの中断を防げます。 - 入力にはテーブル、出力には通常の範囲を使う:テーブルは構造化されたデータ入力に最適です。動的配列の結果には、近くにある通常の範囲を使いましょう。
- 結合セルを含む名前付き範囲に注意する:名前付き範囲が結合セルを含んでいると、見た目には問題なさそうでもスピルがブロックされます。
- エンドユーザー向けブックでは
IFERRORでラップする:他の人がファイルを使う場合、エッジケースのエラーを適切に非表示にしましょう:
=IFERROR(FILTER(A2:A100, B2:B100="Active"), "No results")
- デバッグ前に非表示を解除する:非表示の行や列にもデータは存在します。スピルのパス上にある非表示セルに不要な値があると、表示されているセルと同様に
#SPILL!が発生します。

