※本ページにはプロモーション(広告)が含まれています
「便利だと聞いてXLOOKUP関数を入れてみたら、いきなり#SPILL!という見慣れないエラーが出て止まってしまった」「ネットの解説どおりに数式を打ったはずなのに、結果が表示されずエラーマークだけが出る」――Excelを覚えたての事務職の方や、関数を使い始めたばかりの方が、最初につまずきやすいのがこの「スピル(#SPILL!)エラー」です。VLOOKUPでは出なかったエラーなので、何が悪いのか見当もつかず手が止まってしまいますよね。本記事を読めば、#SPILL!が出る仕組みと8つの原因、そして青い破線枠を手がかりに自分で原因を突き止めて解決する方法まで、順を追って確実に身につきます。

この記事でわかること
- そもそも「スピル」とは何か、なぜ#SPILL!エラーが起きるのかという全体像
- #SPILL!エラーが発生する代表的な8つの原因と、それぞれの見分け方
- 青い破線枠と「スピル範囲」をクリックして原因を一発で特定する方法
- 邪魔なデータの削除・結合セル解除・テーブル外への移動といった具体的な対処手順
- あえて1個の値だけ返したいときに使う「@(暗黙的なインターセクション)」の使い方
- #SPILL!・#CALC!・#REF!・@マークなど、エラー記号ごとの意味と対処の早見表
- XLOOKUPやFILTERが使えるExcelのバージョン(Microsoft 365・2021以降)の確認方法
そもそも「スピル」とは?#SPILL!エラーが起きる仕組み
XLOOKUP・FILTER・SORT・UNIQUE・SEQUENCEといった関数は、Microsoft 365とExcel 2021から導入された「動的配列(ダイナミックアレイ)」という新しい仕組みの上で動いています。従来のVLOOKUPは「1つのセルに1つの結果」を返すだけでしたが、動的配列に対応した関数は、1つのセルに数式を入れるだけで、必要なぶんだけ自動的に隣や下のセルへ結果があふれ出して表示されます。この「あふれ出して複数セルに展開される動き」を、英語の spill(こぼれる・あふれる)になぞらえて「スピル」と呼びます。
たとえば、XLOOKUPで該当する行の「氏名・部署・電話番号」の3列をまとめて取り出す数式を1つ入れると、結果が横に3セル分スピルして表示されます。FILTER関数で条件に合う行を抽出すれば、ヒットした件数ぶんだけ下方向に結果がスピルします。数式を入れたセル(左上の1個)を「親セル」、あふれ出した先を「スピル範囲」と呼び、スピル範囲には淡い青色の枠が表示されます。
ここで重要なのが、#SPILL!エラーは「スピルしたくてもできない」ときに出るという点です。Excelが「本来はここまで結果を展開したいのに、その場所に何か邪魔があって展開できません」と訴えているのが#SPILL!です。つまりエラーそのものより、「展開しようとした先に何があるのか」を確認することが解決の最短ルートになります。逆に言えば、邪魔さえ取り除けば一瞬で正常表示に戻る、比較的やさしいエラーでもあります。

#SPILL!エラーが出る主な原因8パターン
実務でぶつかる#SPILL!の原因は、ほぼ次の8つに集約されます。上から順に当てはまるかを確認していけば、原因はほぼ特定できます。
原因1:スピル先の範囲に既存の値や文字が残っている
もっとも多い原因です。XLOOKUPやFILTERが結果をあふれ出させたい場所(スピル範囲)に、すでに別の数値・文字・スペースなどが入っていると、Excelは上書きを避けて#SPILL!を出します。たとえばB2にFILTER数式を入れて結果が下に5行展開されるはずなのに、B4にたまたま古いメモが残っていると、それが障害物になってエラーになります。一見空白に見えても、半角スペースや見えない文字が残っているケースが非常に多いので注意が必要です。
原因2:スピル範囲の中に結合セルがある
結合セル(セルを連結して1つにまとめたセル)が、スピルしたい範囲に1個でも含まれていると、その時点で#SPILL!になります。動的配列は「1セル=1値」を前提に整然と展開する仕組みのため、複数セルが連結された結合セルとは相性が極端に悪く、共存できません。見た目をきれいにするために設定した結合セルが、実は原因だったというパターンは現場で頻発します。
原因3:テーブル(Ctrl+Tで変換済み)の中でスピル系関数を使った
「Ctrl+T」でテーブル形式に変換した表の内部では、XLOOKUPやFILTERなどのスピルする関数は基本的に使えず、#SPILL!になります。テーブルは1行=1レコードという構造を厳密に保つ仕組みなので、勝手に複数セルへあふれ出すスピルとは構造がぶつかります。自分では普通の表のつもりでも、過去に誰かがテーブル変換していると気づかないまま踏むことがあります。
原因4:検索値に意図せず範囲(複数セル)を渡して大量にスピルしている
XLOOKUPの検索値に、本来1つのセルを指定すべきところを、うっかり「A2:A100」のような範囲で指定してしまうと、Excelは「100件ぶん全部それぞれ検索して結果を返す」と解釈し、膨大な結果をスピルさせようとします。その結果、展開先に既存データがぶつかって#SPILL!になります。コピー時に参照範囲がずれたり、列全体を選んでしまったときに起きやすい原因です。
原因5:スピル先がワークシートの末端(最終行・最終列)を超える
数式を入れたセルの位置が下のほうや右のほうにありすぎて、結果を展開しきるとシートの最終行(1048576行目)や最終列を超えてしまう場合も#SPILL!になります。とくに検索値に列全体を指定したケース(原因4)と組み合わさると、「大量の結果×末端を超える」でほぼ確実にエラーになります。
原因6:Excelのバージョンが古く動的配列に対応していない(2019以前)
XLOOKUP・FILTER・SORTといった関数は、Microsoft 365とExcel 2021以降でしか正式に動きません。Excel 2019・2016・2013で同じ数式を入力すると、そもそも関数として認識されず#NAME?エラーになります。また、365で作った動的配列の数式を含むファイルを古いExcelで開くと、互換のために@付きの数式に変換され、結果が崩れたり#SPILL!のような表示になることがあります。
原因7:ファイルを古い「.xls」形式で保存している
拡張子が「.xlsx」ではなく古い「.xls」(Excel 97-2003ブック)で保存していると、動的配列の機能自体がファイル形式としてサポートされず、スピルが正常に機能しません。誰かから受け取ったファイルが.xls形式だった、というケースで起こりがちです。
原因8:循環参照になっている
スピルした結果の範囲が、巡り巡って自分自身を参照してしまう「循環参照」の状態になると、Excelは正しく計算できず#SPILL!や警告を表示します。たとえば、FILTERの結果が展開される範囲を、そのFILTER数式の引数の中で参照してしまっているようなケースです。頻度は低めですが、複雑な数式を組んだときに紛れ込みます。

#SPILL!エラーの具体的な対処手順
原因のあたりがついたら、ここからは実際の操作で直していきます。まずは「青い破線枠」で原因を見える化するところから始めるのが鉄則です。
手順1:エラーセルを選んで「青い破線枠」と原因表示を確認する
#SPILL!と表示されたセルを1回クリックして選択してください。すると、本来結果が展開されるはずだった範囲が青い破線の枠で囲まれて表示されます。これが「ここまで広げたかったけれど何かが邪魔をしている」という範囲です。さらに、セルの左に黄色いひし形のエラーマーク(!マーク)が出るので、そこにマウスを合わせてクリックすると「スピル範囲が空白ではありません」「スピル範囲に結合セルが含まれています」といった具体的な原因メッセージが表示されます。まずはこのメッセージを読むことが、最速の解決につながります。
手順2:青い破線枠の中にある邪魔なデータを削除する
原因が「スピル範囲が空白ではありません」だった場合は、青い破線枠の内側を目で追って、数値や文字が残っているセルを探します。見つけたらそのセルを選び、Deleteキーで削除します。見た目では空白に見えても半角スペースが入っていることがあるので、疑わしいセルはすべて選択してDeleteしておくと確実です。範囲全体を選んでから一括でDeleteすると取りこぼしがありません。邪魔なデータが消えた瞬間、結果が正しくスピルして表示されます。
手順3:スピル範囲内の結合セルを解除する
原因が結合セルの場合は、青い破線枠の内側にある結合セルを選択し、「ホーム」タブ →「配置」グループにある「セルを結合して中央揃え」ボタンをもう一度クリックして結合を解除します。複数の結合セルがあるときは、対象範囲をまとめて選んでから同じボタンを押せば一括で解除できます。見た目の体裁は崩れますが、まずはスピルを優先し、必要なら罫線や中央揃えで見栄えを整え直しましょう。
手順4:テーブルの外でスピル関数を使う
テーブル内でのスピルが原因(原因3)の場合は、数式を入れる場所をテーブルの外のセルに移すのが基本の対処です。どうしてもその表を使いたいなら、表を選択して「テーブルデザイン」タブ →「範囲に変換」を選び、通常のセル範囲に戻せばスピルが使えるようになります。ただし範囲変換するとテーブル特有の自動書式や構造化参照は失われるので、影響範囲を確認してから実行してください。
手順5:検索値を1つのセルに修正する
検索値に範囲を渡してしまっている場合(原因4)は、XLOOKUPの第1引数を「A2:A100」のような範囲から「A2」のような単一セルに直します。数式バーで該当部分をクリックし、余分な範囲指定を1セルに書き換えてEnterを押せば、想定どおり1件ぶんの結果だけがスピルします。複数行に同じ処理をしたいときは、1つのセルで完成させてから下方向にコピー(オートフィル)するのが安全です。
手順6:あえて1個だけ返したいときは「@」を付ける
スピルさせず、昔のVLOOKUPのように「そのセル1個だけに結果を出したい」場合は、数式の前に半角の@を付けます。たとえば=@XLOOKUP(…)のように書くと、スピルを抑制して1値だけ返す「暗黙的なインターセクション」という挙動になります。既存の表のレイアウトを崩したくないとき、1セルずつ下にコピーして使いたいときに便利なテクニックです。
手順7:Excelのバージョンと保存形式を確認・変更する
「ファイル」→「アカウント」で製品名を確認し、「Microsoft 365」または「Excel 2021」以降であればXLOOKUPが使えます。#NAME?が出る場合はバージョン不足の可能性が高いです。また「ファイル」→「名前を付けて保存」で、ファイルの種類を必ず「Excel ブック(*.xlsx)」にして保存し直してください。古い.xls形式のままだと、いくら数式を直してもスピルは安定しません。
エラー記号別・対処早見表
#SPILL!とよく一緒に出てくる関連エラーを、意味と対処でまとめました。記号を見ただけで原因のあたりがつくよう、手元に置いておくと便利です。
| エラー記号 | 意味 | 主な対処 |
|---|---|---|
| #SPILL! | 結果をあふれ出させたい範囲に障害物があって展開できない | 青い破線枠内の邪魔なデータを削除、結合セル解除、テーブル外へ移動 |
| #CALC! | 配列の計算自体に問題がある(空の配列を返す等) | FILTERで一致なしのとき第3引数に「該当なし」を指定する |
| #REF! | 参照先のセルや範囲が削除・移動されて存在しない | 数式内の参照を正しいセル範囲に修正し直す |
| #NAME? | 関数名が認識されない(バージョン不足や打ち間違い) | Microsoft 365または2021以降か確認、関数名のスペルを確認 |
| @(数式の先頭) | スピルを抑制して1個だけ値を返している状態 | 意図的ならそのまま。スピルさせたいなら@を削除 |
| #N/A | XLOOKUPで検索値が見つからなかった | 第4引数に「見つからない場合」の値を指定して対処 |
続いて、XLOOKUPやFILTERなどの動的配列関数が、どのバージョンで使えるのかを早見表にまとめます。
| Excelのバージョン | XLOOKUP・FILTER等の対応 | 備考 |
|---|---|---|
| Microsoft 365 | 対応(全機能) | 常に最新。XLOOKUP・FILTER・SORT・UNIQUEすべて利用可 |
| Excel 2024 | 対応 | 買い切り版。動的配列・XLOOKUPに対応 |
| Excel 2021 | 対応 | 買い切り版で初めて動的配列に正式対応 |
| Excel 2019 | 非対応 | XLOOKUP・FILTERは使えず#NAME?になる |
| Excel 2016 / 2013 | 非対応 | 動的配列の仕組み自体が存在しない |
| Excel for the web(無料版) | おおむね対応 | ブラウザ版でもXLOOKUP・FILTERは利用可能 |
🛒 関連商品をAmazonでチェック
よくある質問(FAQ)
Q1:XLOOKUPはMicrosoft 365じゃないと使えないのですか?
いいえ、買い切り版のExcel 2021とExcel 2024でも使えます。使えないのはExcel 2019以前のバージョンです。「ファイル」→「アカウント」で製品名を確認し、365・2024・2021のいずれかであればXLOOKUPもFILTERも問題なく利用できます。それより古い場合は#NAME?エラーになります。
Q2:数式の先頭に「@」を付けると何が変わりますか?
「@」を付けると、結果を複数セルにあふれ出させる(スピルする)のをやめて、その1セルだけに結果を返すようになります。昔のVLOOKUPと同じ「1セル1結果」の動きになるので、既存の表のレイアウトを崩したくないときや、1行ずつ下にコピーして使いたいときに便利です。スピルさせたい場合は「@」を外してください。
Q3:テーブル(Ctrl+T変換済み)の中でXLOOKUPを使う方法はありますか?
テーブル内では、結果が1セルに収まる使い方(または「@」を付けてスピルを抑制した使い方)にすれば動かせます。複数列をまとめて取り出すようなスピル前提の使い方をしたい場合は、テーブルの外のセルで使うか、「テーブルデザイン」タブの「範囲に変換」で通常のセル範囲に戻してから使ってください。
Q4:スピルした結果だけを値としてコピーするにはどうすればいいですか?
スピル範囲全体を選択(親セルをクリックすると範囲全体が選びやすいです)してCtrl+Cでコピーし、貼り付け先で右クリック →「形式を選択して貼り付け」→「値」を選びます。これで数式ではなく計算済みの値だけが貼り付けられ、元データが変わっても影響を受けない固定データになります。
Q5:青い破線枠の中が全部空白に見えるのに#SPILL!が消えません。なぜですか?
目に見えない半角スペースや、書式だけ設定された見えない文字が残っている可能性が高いです。青い破線枠の範囲をすべて選択してDeleteキーで一括削除してみてください。また、その範囲に結合セルが含まれていないかも確認しましょう。結合セルは空白に見えてもスピルを妨げます。
Q6:FILTERで条件に合うデータがないと別のエラーが出ます。どうすれば?
FILTERは一致するデータが0件だと#CALC!エラーになります。これを防ぐには、FILTERの第3引数(省略可能な引数)に、見つからなかったときに表示したい文字を指定します。たとえば「該当なし」と表示させるよう設定しておけば、エラーではなくメッセージが出るようになり、表が見やすくなります。
Q7:以前は動いていた数式が、ファイルを送ったら相手側で崩れました。原因は?
相手のExcelのバージョンが2019以前だったか、ファイルが古い.xls形式で保存された可能性があります。動的配列に対応していない環境では、XLOOKUPやFILTERは正しく動きません。お互いにMicrosoft 365・2021・2024を使い、ファイルは必ず.xlsx形式でやり取りすることで、こうした崩れを防げます。
まとめ
#SPILL!エラーは「結果をあふれ出させたいのに邪魔があってできない」というサインです。怖がらず、まずはエラーセルを選んで青い破線枠と原因メッセージを確認し、邪魔なデータの削除・結合セルの解除・テーブル外への移動という順で対処すれば、ほとんどのケースは解決します。1個だけ返したいときは「@」、使えないときはバージョンと.xlsx形式を確認。この流れさえ覚えれば、XLOOKUPやFILTERを安心して使いこなせます。
minto.tech スマホ(Android/iPhone)・PC(Mac/Windows)の便利情報をお届け! 月間アクセス160万PV!スマートフォン、タブレット、パソコン、地デジに関する素朴な疑問や、困ったこと、ノウハウ、コツなどが満載のお助け記事サイトはこちら!