Menu

Excelの#SPILL!エラーの原因と直し方

#SPILL!は、複数の値を返す数式に、それを置く場所がないという意味です。スピル範囲のどこかのセルが空ではありません。邪魔になっているセルを空にすると、結果が表示されます。

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

#SPILL!は、数式が複数の値(リストや表)を返すのに、Excelにそれを書き込む場所がないという意味です。結果に必要な範囲のどこかのセルが空ではありません。下の=UNIQUE(A2:A6)はC2からC4の3つのセルを必要としますが、C4にxが入っています。C4を削除すると、リストが表示されます。

値に妨げられたUNIQUE
C2
ABC
1ProductUnique list
2Apple#SPILL!
3Pear
4Applex
5Plum
6Pear
#SPILL! 結果を表示する空きセルが足りません。邪魔なセルを空にしてください。

C2をクリックしてください。グリッドの下の注記が何が問題かを示します。次にC4をクリックしてDeleteキーを押します。3つの商品がC2:C4にスピルし、枠線がスピル範囲を示します。C3に何か入力すると、エラーが戻ってきます。Excelでも同じで、FILTER、UNIQUE、SORT、SEQUENCE、TEXTSPLITのような配列を返す関数は、スピル範囲全体が空いているときだけ動きます。これらにはExcel 2021以降が必要で(TEXTSPLITはMicrosoft 365かExcel 2024)、それより古いバージョンでは#NAME?になるので、#SPILL!は出てきません(関数そのものについてはUNIQUEを参照)。

#SPILL!エラーの直し方

  1. #SPILL!のセルをクリックします。Excelでは、結果が埋めようとしている範囲が点線の枠で示されます。
  2. セルの横の警告アイコンをクリックし、障害となっているセルを選択を選びます。Excelが邪魔になっているセルをすべて選択します。
  3. Deleteキーを押すか、そのセルを別の場所に移動します(切り取って貼り付けます)。

邪魔になっているセルに必要なデータが入っているなら、代わりに数式を移動します。下と横がすべて空いている列や行に置いてください。

セルが空に見えるのに#SPILL!になる

いちばんわかりにくいケースです。スピル範囲は空白に見えるのに、Excelは#SPILL!と表示します。スペースが1つだけ入ったセルや、空の文字列""を返す数式のセルは空ではなく、値と同じようにスピルを妨げます。

空に見えて妨げるセル
A2
ABC
1NumbersNumbers
2#SPILL!#SPILL!
3
4
#SPILL! 結果を表示する空きセルが足りません。邪魔なセルを空にしてください。

A2はA2:A4を必要としますが、A4にはスペースが入っています。C2はC2:C3を必要としますが、C3には=""が入っています。A4かC3をクリックして中身を確かめ、削除すると数値がスピルします。Excelでは、障害となっているセルを選択を使えば、何も見えないセルでも見つけられます。白い背景に白い文字も同じように隠れます。

1つの数式が別の数式にスピルして#SPILL!になる

スピルする2つの数式が互いに妨げ合ったり、誰かが下のほうに入力した数式が上の数式のスピル範囲に入っていたりすることがあります。

互いに邪魔をする2つの数式
D2
ABCDE
1NameDeptITSales
2AnaIT#SPILL!Ben
3BenSalesDee
4CyIT5
5DeeSales
6EveIT
#SPILL! 結果を表示する空きセルが足りません。邪魔なセルを空にしてください。

ITのリストはD2:D4の3つのセルを必要としますが、D4にCOUNTAの数式が入っています。E2のSalesのリストは必要な2つのセルが空いているので動きます。COUNTAの数式をD6(またはリストより下のどこかのセル)に移動すると、ITの名前がスピルします。リストが伸びる余地を残しておいてください。後でITの社員が4人目に増えると、結果にはもう1つセルが必要になります。

VLOOKUPや列全体の指定で#SPILL!になる

古いExcel向けに書かれた数式でよくある原因は、検索値が列全体になっていることです:

=VLOOKUP(A:A,Prices!A:B,2,FALSE)      #SPILL!  (one result for every row of the sheet)
=VLOOKUP(A2,Prices!A:B,2,FALSE)       one result, fill it down
=VLOOKUP(A2:A100,Prices!A:B,2,FALSE)  100 results that spill
=VLOOKUP(@A:A,Prices!A:B,2,FALSE)     one result, the value on the formula's own row

A:Aには1,048,576個のセルがあるので、1つ目の数式は1,048,576個の結果を求めます。2行目から下では行が足りないので、警告メニューには「スピル範囲がワークシートの端を超えています」と表示されます。このパターンは、数式と同じ行の値だけを暗黙のうちに使っていた古いExcelから来ています。Excel 365は古いブックではその動きを保つために数式を=VLOOKUP(@A:A,...)と表示しますが、同じ数式を新しく入力すると列全体がスピルします。=A:A*2など、列全体に計算をする数式でも同じことが起きます。1つのセルを指定して下にコピーするか、実際の大きさの範囲か、@を使ってください。検索そのものについてはVLOOKUPのページで詳しく説明しています。

スピルの代わりに行ごとに1つの結果

範囲に計算をする数式もスピルします。それが望む結果のことも多いですが、行ごとに1つの数式にしたいこともあります。

1つのスピルする数式と、行ごとの数式
C2
ABCD
1MonthSalesSpilled +10%Filled +10%
2Jan100110110
3Feb120132132
4Mar909999
5Apr140154154
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

どちらの列も110、132、99、154を表示します。C2には1つの数式が入っていて、C3:C5はそのスピルです。C3をクリックすると、グリッドの下の注記がC2からスピルしていることを示します。C4に入力するとC2が#SPILL!になります。D2:D5は4つの別々の数式なので、セルごとに変えられ、妨げられることもありません。人が個々の結果に上書き入力するなら、2つ目の形を使います。

テーブル、結合セル、大きさが決まらない場合の#SPILL!

次の原因は数式ではなくブックの状態によるものです:

  • Excelのテーブルの中(挿入 > テーブル):テーブルはスピルする結果に対応していないので、テーブルの列にあるFILTERやUNIQUEは#SPILL!になります。数式をテーブルの外に置くか、テーブルを選択してテーブルデザイン > 範囲に変換を選びます。
  • スピル範囲の結合セル:セルを選択してホーム > セルを結合して中央揃え > セル結合の解除を選ぶか、数式を移動します。
  • スピル範囲の大きさが不明:=SEQUENCE(RANDBETWEEN(1,10))のように、再計算のたびに結果の大きさが変わる場合です。Excelは大きさが変わる結果のスピルを受け付けません。大きさを固定してください。
  • スピル範囲が大きすぎる、またはワークシートの端を超える:結果が最後の行や列を越えてしまいます。メモリ不足:配列が大きすぎて計算できません。3つとも、範囲を小さくします。たいていは列全体の指定を実際のデータの範囲にします。

値を1つ返して、何にも妨げられないようにする

リストから欲しい数値が1つだけのとき、たとえば商品が何種類あるかを知りたいときは、スピルする関数を値を1つ返す関数で囲みます。値が1つならスピルしないので、どのセルにも邪魔されません。

商品は何種類か
E2
ABCDE
1ProductDifferent products
2Apple
3Pear
4Applex
5Plum
6Pear
7Apple
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

やってみよう: E2には、A2:A7に何種類の商品があるかを表示します。普通の=UNIQUE(A2:A7)ではE4のxにスピルしてしまいます。E2に、件数を返す数式を1つ書いてください。

COUNTAはUNIQUEが返した値を数え、1つの数値を返します。同じ考え方で、並べ替えたリストの最初の値なら=INDEX(SORT(A2:A7),1)、最初に一致したものなら=INDEX(FILTER(...),1)、合計なら=SUM(FILTER(...))が使えます。

よくある質問

Excelの#SPILL!はどういう意味ですか?

数式が2つ以上の値(スピルする配列)を返したのに、Excelがそれを下や横のセルに書き込めなかったという意味です。そのセルのどれかが空でないか、結合されているか、テーブルの中にあります。邪魔なものを消すか移動すると、結果が表示されます。

セルが空に見えるのに#SPILL!になるのはなぜですか?

空に見えるセルにも、スペース、""を返す数式、白い文字の文字列が入っていることがあります。どれもスピルを妨げます。エラーの横の警告アイコンをクリックして障害となっているセルを選択を選び、Deleteキーを押します。

VLOOKUPの#SPILL!を直すには?

検索値が=VLOOKUP(A:A,D:E,2,FALSE)のように列全体や範囲になっているので、Excelがシートの行ごとに1つずつ結果を返そうとしています。1つのセルを指定して下にコピーする=VLOOKUP(A2,D:E,2,FALSE)か、実際の大きさの範囲=VLOOKUP(A2:A100,D:E,2,FALSE)を使います。

Excelで数式をスピルさせないようにするには?

値を1つだけ返すようにします。範囲の前に@を付けて数式と同じ行の値だけを使う(=@A2:A10*2)か、=COUNTA(UNIQUE(A2:A10))や=INDEX(SORT(A2:A10),1)のように値を1つ返す関数で結果を囲みます。

スピルする数式をExcelのテーブルの中に置けますか?

置けません。スピルする数式はテーブルの中では#SPILL!になります。テーブルの外のセルに置くか、テーブルデザイン > 範囲に変換でテーブルを普通の範囲に変えます。

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

Coddyでコードを学ぼう

始める