※本ページにはプロモーション(広告)が含まれています
Excelで数式を入力したら、突然 #SPILL! という見慣れないエラーが表示されて困っていませんか?
この「#SPILL!エラー」は、Excel 365やExcel 2021で導入された「スピル(動的配列)」機能に関連するエラーです。FILTER関数やUNIQUE関数、SORT関数などを使ったときに発生しやすく、原因がわからないと何度やっても同じエラーが繰り返されてしまいます。
この記事では、Excelの#SPILL!エラーが発生する原因を7パターンに分類し、それぞれの具体的な対処法をスクリーンショット風の図解付きでわかりやすく解説します。初心者の方でも、この記事を読めば確実にエラーを解消できるようになります。
この記事でわかること
- 「スピル」とは何か?動的配列数式の基本的なしくみ
- #SPILL!エラーが発生する7つの原因(隣接セル・結合セル・テーブル内など)
- 原因ごとの具体的な対処法(手順つき)
- @演算子を使って結果を1つだけ返す方法
- スピル範囲演算子(#)の使い方
- Excel 365とExcel 2021のスピル対応の違い
- よくある質問(FAQ)10選
そもそも「スピル(Spill)」とは?動的配列数式の基本を理解しよう
エラーの対処法を説明する前に、まず「スピル」とは何かを理解しておきましょう。これがわかると、なぜ#SPILL!エラーが発生するのかがスッキリ理解できます。
スピルとは「数式の結果が自動的にあふれ出る」機能
「スピル(Spill)」とは、英語で「こぼれる・あふれる」という意味です。Excelにおけるスピルとは、1つのセルに入力した数式の結果が、隣接する複数のセルに自動的に展開(あふれ出る)される機能のことです。
たとえば、A1:A5に数値が入っている状態で、C1セルに =SORT(A1:A5) と入力すると、並べ替えた結果がC1からC5まで自動的に表示されます。C2~C5には何も入力していないのに、結果が「あふれ出る」のです。
スピルが使える代表的な関数
スピルが発生する「動的配列関数」には、以下のようなものがあります。
| 関数名 | 機能 | 数式の例 |
|---|---|---|
| SORT | データを並べ替える | =SORT(A1:A10) |
| FILTER | 条件に合うデータを抽出する | =FILTER(A1:B10,B1:B10>100) |
| UNIQUE | 重複を除いた一覧を返す | =UNIQUE(A1:A20) |
| SEQUENCE | 連番を生成する | =SEQUENCE(10) |
| SORTBY | 別の列を基準に並べ替える | =SORTBY(A1:A10,B1:B10) |
| RANDARRAY | 乱数の配列を生成する | =RANDARRAY(5,3) |
| XLOOKUP | 高機能な検索関数 | =XLOOKUP(E1,A1:A10,B1:C10) |
| TRANSPOSE | 行と列を入れ替える | =TRANSPOSE(A1:D1) |
これらの関数は結果を複数のセルに展開するため、展開先に何か障害があると#SPILL!エラーが発生します。
スピル範囲演算子「#」について
スピルの結果全体を参照するには、スピル範囲演算子「#」を使います。たとえば、C1セルにスピルする数式を入力した場合、=C1# と入力すると「C1のスピル範囲全体」を参照できます。
この「#」は他の数式でスピル結果を利用したいときに非常に便利です。たとえば =SUM(C1#) と書けば、スピルされた全データの合計を求められます。
#SPILL!エラーが発生する7つの原因
#SPILL!エラーの原因は大きく分けて7パターンあります。まず一覧で確認し、そのあと一つずつ詳しく解説します。
| 番号 | 原因 | よくある状況 | 難易度 |
|---|---|---|---|
| 1 | スピル先のセルにデータがある | 隣のセルに文字や数値、スペースが入っている | 簡単 |
| 2 | 結合セルが含まれている | スピル先の範囲に結合セルがある | 簡単 |
| 3 | Excelテーブル内で使用している | Ctrl+Tで作成したテーブル内に数式がある | 普通 |
| 4 | 列全体・行全体を参照している | =SORT(A:A)のような全列参照 | 簡単 |
| 5 | ワークシートの端を超えている | 結果が最終行(1,048,576行)を超える | 簡単 |
| 6 | 揮発性関数でサイズが不安定 | RAND、RANDARRAYの結果サイズが変動する | やや難 |
| 7 | 非対応バージョンのExcelを使用 | Excel 2019以前ではスピル非対応 | 普通 |
【対処法1】スピル先のセルにデータがある場合
これが#SPILL!エラーの最も多い原因です。数式の結果が展開されるはずのセル(スピル範囲)に、すでにデータ(文字・数値・スペースなど)が入っていると、Excelは結果を表示できずエラーになります。
症状の確認方法
#SPILL!エラーが表示されているセルをクリックすると、スピル範囲が青い点線の枠で表示されます。この枠の中に何かデータが入っているセルがないか確認しましょう。
対処手順
ステップ1:エラーが表示されているセルをクリックします。
ステップ2:セルの左上に表示される黄色い三角形の警告アイコン(エラーチェックアラート)をクリックします。
ステップ3:表示されるメニューから「邪魔をしているセルを選択」をクリックします。すると、障害となっているセルが自動的に選択されます。
ステップ4:選択されたセルの内容を削除するか、別の場所に移動します。
ステップ5:Enterキーを押して確定すると、#SPILL!エラーが解消され、正常にスピルされます。
【対処法2】結合セルが含まれている場合
スピル先の範囲に結合セル(セルの結合)が含まれていると、Excelは結果をそこに配置できないため#SPILL!エラーになります。
対処手順
ステップ1:スピル範囲(青い点線の枠)内に結合セルがないか確認します。
ステップ2:結合されているセルを選択します。
ステップ3:「ホーム」タブ→「セルを結合して中央揃え」ボタンをクリックして結合を解除します。
または、以下の手順でも結合を解除できます。
別の方法:結合セルを選択 →「ホーム」タブ →「セルを結合して中央揃え」の横の▼ →「セル結合の解除」をクリック
【対処法3】Excelテーブル内で使用している場合
Excelの「テーブル」機能(Ctrl + Tで作成)の中では、動的配列数式(スピルする数式)はサポートされていません。テーブル内にFILTER関数やUNIQUE関数を入力すると、#SPILL!エラーになります。
対処法A:テーブルの外に数式を移動する
ステップ1:テーブル内の#SPILL!エラーが出ている数式をコピー(Ctrl + C)します。
ステップ2:テーブルの範囲外のセルに数式を貼り付け(Ctrl + V)します。
ステップ3:テーブル内の元のセルの数式を削除します。
対処法B:テーブルを範囲に変換する
テーブルをやめて通常のセル範囲に戻す方法です。
ステップ1:テーブル内のいずれかのセルをクリックします。
ステップ2:リボンの「テーブルデザイン」タブをクリックします。
ステップ3:「ツール」グループの「範囲に変換」をクリックします。
ステップ4:確認ダイアログで「はい」をクリックします。
対処法C:@演算子を使う(テーブル内で1つだけ返す)
テーブル内でスピルする関数を使いたいけど、テーブルの外に出したくない場合は、@演算子(暗黙的インターセクション演算子)を使って、結果を1つだけ返す方法があります。
たとえば、テーブル内で =@SORT(A1:A10) と入力すると、SORT関数の結果のうち最初の1件だけがそのセルに表示されます。これならスピルが発生しないので、テーブル内でもエラーになりません。
| 数式 | 動作 | テーブル内での使用 |
|---|---|---|
| =SORT(A1:A10) | 全結果をスピル(複数セルに展開) | 不可(#SPILL!エラー) |
| =@SORT(A1:A10) | 最初の1件だけを返す | 可能 |
| =UNIQUE(B:B) | 重複を除いた全一覧をスピル | 不可(#SPILL!エラー) |
| =@UNIQUE(B2:B100) | 最初の一意値のみを返す | 可能 |
【対処法4】列全体・行全体を参照している場合
=SORT(A:A) のように列全体を参照すると、Excelは1,048,576行分の結果を返そうとします。結果がワークシートの端を超えてしまい、#SPILL!エラーが発生します。
対処手順
ステップ1:数式の参照範囲を確認します。
ステップ2:列全体の参照(A:Aなど)を、実際にデータがある範囲に変更します。
変更例:
=SORT(A:A)→=SORT(A1:A100)=UNIQUE(B:B)→=UNIQUE(B2:B500)=FILTER(A:C, C:C>100)→=FILTER(A1:C200, C1:C200>100)
【対処法5】ワークシートの端を超えている場合
数式の結果がワークシートの最終行(1,048,576行)や最終列(XFD列)を超える場合にも#SPILL!エラーが発生します。これは数式を入力したセルの位置が下すぎたり右すぎたりする場合に起こります。
対処手順
ステップ1:数式を入力するセルの位置を確認します。
ステップ2:数式をシートの上部(例:A1やB1付近)に移動します。これにより、結果を展開する十分なスペースが確保されます。
たとえば、=SEQUENCE(100) を行番号1,048,500のセルに入力すると、結果が最終行を超えてしまいます。これをA1セルに移動すれば解決します。
【対処法6】揮発性関数でスピルサイズが不安定な場合
RAND関数、RANDARRAY関数、RANDBETWEEN関数など、計算のたびに結果が変わる「揮発性関数」を使用した動的配列数式では、スピル範囲のサイズが計算パスごとに変動してしまうことがあります。
Excelはスピル範囲のサイズが安定しない場合、#SPILL!エラーを返します。
対処手順
ステップ1:RANDARRAY関数などを使用している場合、結果のサイズを固定します。
変更例:
=RANDARRAY(RANDBETWEEN(1,10))→ サイズが毎回変わるのでNG=RANDARRAY(5,3)→ 5行3列で固定されるのでOK
ステップ2:FILTER関数と組み合わせている場合は、条件にRAND系関数を使わないようにしましょう。
ステップ3:どうしても動的にサイズが変わる数式が必要な場合は、スピル先に十分な空白領域を確保しておきます。
【対処法7】非対応バージョンのExcelを使用している場合
スピル(動的配列数式)は、すべてのバージョンのExcelで使えるわけではありません。対応バージョンと非対応バージョンを確認しましょう。
| Excelバージョン | スピル対応 | 備考 |
|---|---|---|
| Microsoft 365(旧Office 365) | 対応 | 最新機能をフル利用可能 |
| Excel 2021 | 対応 | 動的配列関数に対応 |
| Excel for the web(Web版) | 対応 | ブラウザ版でも利用可能 |
| Excel 2019 | 非対応 | 旧来の配列数式のみ |
| Excel 2016 | 非対応 | 旧来の配列数式のみ |
| Excel 2013以前 | 非対応 | 旧来の配列数式のみ |
非対応バージョンで発生する問題
Excel 365やExcel 2021で作成したスピルを含むファイルを、Excel 2019以前のバージョンで開くと、以下のような現象が起こります。
- スピルされた結果が表示されず、#SPILL!エラーが出る場合がある
- 数式の先頭に@演算子が自動的に追加され、最初の1件のみが表示される
- 動的配列関数(FILTER、UNIQUE、SORTなど)自体が認識されず#NAME?エラーになる
対処法
ステップ1:使用しているExcelのバージョンを確認します。
「ファイル」→「アカウント」→「Excelのバージョン情報」で確認できます。
ステップ2:Excel 2019以前の場合は、以下のいずれかを検討します。
- Microsoft 365にアップグレードする(推奨)
- Excel for the web(無料のWeb版Excel)を使う
- 旧来の配列数式(Ctrl + Shift + Enterで確定する方式)を使用する
Excel 365とExcel 2021のスピル機能の違い
同じスピル対応でも、Excel 365とExcel 2021ではいくつかの違いがあります。
| 機能 | Microsoft 365 | Excel 2021 |
|---|---|---|
| FILTER関数 | 対応 | 対応 |
| UNIQUE関数 | 対応 | 対応 |
| SORT関数 | 対応 | 対応 |
| SEQUENCE関数 | 対応 | 対応 |
| XLOOKUP関数 | 対応 | 対応 |
| GROUPBY関数 | 対応 | 非対応 |
| PIVOTBY関数 | 対応 | 非対応 |
| 機能アップデート | 随時追加 | 購入時の機能のみ |
Microsoft 365はサブスクリプション型のため、新しい関数や機能が随時追加されます。一方、Excel 2021は買い切り型で、購入時の機能から増えることはありません。長期的にスピル関連の最新機能を使いたい場合は、Microsoft 365がおすすめです。
【応用テクニック】スピルに関する便利な知識
@演算子で結果を1つだけ取得する
動的配列関数の前に@(アットマーク)を付けると、結果の先頭1件だけを返すことができます。これを「暗黙的インターセクション演算子」といいます。
使い方の例:
=@FILTER(A1:A10,B1:B10>50)→ 条件を満たす最初の1件のみ表示=@UNIQUE(C1:C100)→ 重複除外の最初の値のみ表示=@SORT(A1:A10)→ 並べ替え結果の最初の値のみ表示
テーブル内で動的配列関数を使いたい場合や、結果が1つだけ必要な場合に活用しましょう。
スピル範囲演算子「#」で結果全体を参照する
スピルの結果全体を他の数式で利用するには、「#」(スピル範囲演算子)を使います。
使い方の例:
- D1にスピル数式がある場合 →
=SUM(D1#)でスピル結果全体の合計 =COUNTA(D1#)でスピル結果の個数=AVERAGE(D1#)でスピル結果の平均=SORT(D1#)で別のスピル結果をさらに並べ替え
「#」を使えば、スピルされたデータの個数が変わっても参照範囲が自動的に調整されるので、非常に便利です。
#SPILL!エラーの原因を素早く特定するコツ
以下の手順で、原因を効率的に特定できます。
1. エラーセルを選択して青い点線の枠(スピル範囲)を確認する
2. 黄色い警告アイコンをクリックして、表示されるメッセージを読む
メッセージには以下のような具体的な原因が書かれています。
| エラーメッセージ | 原因 |
|---|---|
| スピル範囲が空白ではありません | スピル先のセルにデータがある |
| スピル範囲に結合されたセルがあります | 結合セルが含まれている |
| テーブル内ではスピルできません | Excelテーブル内で使用している |
| ワークシートの端を超えています | 結果が最終行・列を超えている |
よくある質問(FAQ)
Q1. #SPILL!エラーとは何ですか?
A. #SPILL!エラーは、Excelの動的配列数式(スピルする数式)が、何らかの理由で結果を展開できないときに表示されるエラーです。スピル先のセルにデータがある、結合セルがある、テーブル内で使用しているなど、複数の原因が考えられます。
Q2. スピル先に何もないように見えるのに#SPILL!エラーが出ます。なぜですか?
A. 見えないデータ(半角スペース、改行コード、空白文字列を返す数式など)がセルに入っている可能性があります。エラーセルの警告アイコンから「邪魔をしているセルを選択」で該当セルを特定し、Deleteキーで確実にクリアしてください。数式バーに何か表示されていないかも確認しましょう。
Q3. テーブル内でFILTER関数やUNIQUE関数を使いたいのですが、可能ですか?
A. テーブル内ではスピルする関数はそのままでは使えません。対処法は3つあります。(1)数式をテーブルの外に移動する、(2)テーブルを範囲に変換する(テーブルデザイン→範囲に変換)、(3)@演算子を付けて1件だけ返す(例:=@FILTER(…))。用途に合わせて選んでください。
Q4. @演算子(アットマーク)を付けると何が変わりますか?
A. @演算子は「暗黙的インターセクション演算子」と呼ばれ、数式の結果から先頭の1件のみを返します。=@SORT(A1:A10) とすれば、並べ替え結果のうち最初の1つだけがセルに表示されます。テーブル内で動的配列関数を使いたい場合や、結果が1つだけ欲しい場合に便利です。
Q5. Excel 2019で#SPILL!エラーが出ます。どうすればいいですか?
A. Excel 2019はスピル(動的配列数式)に対応していません。Excel 365やExcel 2021で作成されたスピルを含むファイルを開くとエラーになります。Microsoft 365にアップグレードするか、無料のExcel for the web(Web版Excel)を使用してください。
Q6. =SORT(A:A)と入力したら#SPILL!エラーになりました。なぜですか?
A. 列全体(A:A)を参照すると、Excelは1,048,576行分の結果を返そうとします。結果がシートの端を超えるため#SPILL!エラーになります。=SORT(A1:A100) のように、実際にデータがある範囲を指定してください。
Q7. スピル範囲演算子「#」とは何ですか?
A. スピル範囲演算子「#」は、スピルの結果全体を参照するための記号です。たとえば、D1にスピル数式が入っている場合、=SUM(D1#) と入力すればスピル結果全体の合計を求められます。結果の個数が変わっても自動的に参照範囲が調整されるのが大きなメリットです。
Q8. #SPILL!エラーのセルを参照している他の数式はどうなりますか?
A. #SPILL!エラーが発生しているセルを他の数式で参照すると、その数式も#SPILL!エラーを返すことがあります。元の#SPILL!エラーを修正すれば、連鎖的に他のエラーも解消されます。
Q9. RANDARRAY関数で#SPILL!エラーが出る場合の対処法は?
A. RANDARRAY関数やRAND関数は「揮発性関数」と呼ばれ、計算のたびに結果が変わります。引数にRANDBETWEEN関数を使ってサイズを可変にすると、スピル範囲が安定せずエラーになることがあります。=RANDARRAY(5,3) のように行数と列数を固定値にすることで解決できます。
Q10. Googleスプレッドシートでも#SPILL!エラーは発生しますか?
A. いいえ、Googleスプレッドシートでは#SPILL!エラーは発生しません。Googleスプレッドシートには独自の配列展開機能があり、スピルの仕組みとは異なります。ただし、展開先にデータがある場合は上書きされるため注意が必要です。
まとめ
Excelの#SPILL!エラーは、動的配列数式(スピル機能)の結果が正しく展開できないときに発生するエラーです。原因と対処法を改めて整理しましょう。
| 原因 | 対処法 |
|---|---|
| スピル先にデータがある | 邪魔をしているセルをクリアする |
| 結合セルが含まれている | セル結合を解除する |
| Excelテーブル内で使用 | テーブル外に移動、範囲に変換、@演算子を付ける |
| 列全体を参照している | 具体的なセル範囲に変更する |
| ワークシートの端を超えている | 数式のセル位置を上部に移動する |
| 揮発性関数でサイズが不安定 | 結果のサイズを固定値にする |
| 非対応バージョンのExcel | Microsoft 365またはExcel 2021にアップグレード |
#SPILL!エラーは、最初は戸惑うかもしれませんが、原因のパターンは限られているため、この記事で解説した7つのチェックポイントを順番に確認すれば必ず解決できます。
特に多いのは「スピル先のセルにデータがある」ケースです。まずはエラーセルをクリックして表示される青い点線の枠内を確認し、邪魔になっているセルをクリアすることから始めてみてください。
動的配列関数(FILTER、UNIQUE、SORT、SEQUENCEなど)はExcelの生産性を大幅に向上させる強力な機能です。#SPILL!エラーの対処法をマスターして、これらの関数を活用していきましょう。
minto.tech スマホ(Android/iPhone)・PC(Mac/Windows)の便利情報をお届け! 月間アクセス160万PV!スマートフォン、タブレット、パソコン、地デジに関する素朴な疑問や、困ったこと、ノウハウ、コツなどが満載のお助け記事サイトはこちら!