ExcelでDynamic Array数式の出力がブロックされる#SPILL!エラーを修正する方法

beginner📊 Microsoft Excel2026-05-06| Microsoft Excel 2019、Excel 2021、Microsoft 365(WindowsおよびmacOS)— 動的配列をサポートするすべてのバージョン

Error Message

#SPILL!
#excel#動的配列#spill-エラー#数式

エラーの内容

=UNIQUE(A2:A100)=FILTER(B2:B50, C2:C50="Active") のような数式を入力したとき、結果が表示される代わりに Excel が次のエラーを表示します:

#SPILL!

アンカーセルに破線の枠と警告アイコンが表示されます。ホバーすると 「スピル範囲が空白ではありません」 など、原因によって異なるメッセージが表示されます。

発生原因

動的配列数式(UNIQUEFILTERSORTSEQUENCE、複数結果を返す 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! が発生します。

Related Error Notes