Excel での #スピル! エラー - ワークシートの端を超えて拡張する

適用先
Excel for Microsoft 365 Excel for Microsoft 365 for Mac Excel for iPad Excel Web App Excel for iPhone Excel for Android タブレット Excel for Android スマートフォン

入力しようとしているスピル済み配列数式は、ワークシートの範囲を超えて拡張されます。 より小さい範囲または配列でもう一度やり直してください。

次の例では、数式をセル F1 に移動するとエラーが解決し、数式は正しくスピルします。

#SPILL!エラー セル F2 の =SORT(D:D) がブックの端を超えて拡張されます。セル F1 に移動すると、正常に動作します。

一般的な原因: 完全な列参照

lookup_value 引数を過剰に指定して VLOOKUP 数式を作成するという、誤解されがちな方法があります。 動的配列対応の Excel を使用する前は、VLOOKUP で 1 つの値のみが想定されるため、Excel は同じ行の値のみを数式と考慮し、他の値は無視していました。 動的配列の導入により、Excel はlookup_valueに提供されたすべての値を考慮します。 つまり、列全体がlookup_value引数として指定された場合、Excel は列内の 1,048,576 個の値すべてを検索しようとします。 完了すると、それらをグリッドにこぼそうとし、グリッドの端にぶつかり、#SPILL が発生する可能性が非常に高いです。 エラーを返します。  

たとえば、次の例のようにセル E2 に配置された場合、数式 =VLOOKUP(A:A,A:C,2,FALSE) は、以前はセル A2 の ID のみを検索していました。 ただし、動的配列 Excel では、数式によって #SPILL! Excel は列全体を検索し、1,048,576 件の結果を返し、Excel グリッドの末尾をヒットします。

#SPILL!結果がワークシートの端を越えてスピルしてしまうため、セル E2 の =VLOOKUP(A:A,A:D,2,FALSE) でエラーが発生しました。数式をセル E1 に移動すると、正しく機能します。

この問題を解決するには、次の 3 つの簡単な方法があります。

# 方法 数式
1 目的の参照値のみを参照します。 このスタイルの数式は 動的配列 を返しますが、 Excel のテーブルでは機能しません。
#SPILL にならない動的配列を返すには、=VLOOKUP(A2:A7,A:C,2,FALSE) を使用します。エラー。
=VLOOKUP(A2:A7,A:C,2,FALSE)
2 同じ行の値だけを参照し、数式を下にコピーします。 この従来の数式スタイルは テーブルでは機能しますが、 動的配列は返されません。
単一のlookup_value参照 = VLOOKUP(A2,A:C,32,FALSE) で従来の VLOOKUP を使用します。この数式は動的配列を返しませんが、Excel のテーブルで使用できます。
=VLOOKUP(A2,A:C,2,FALSE)
3 @ 演算子を使用して共通部分を実行するように Excel に要求し、数式をコピーします。 このスタイルの数式は テーブルで機能しますが、 動的配列は返されません。
@ 演算子を使用し、=VLOOKUP(@A:A,A:C,2,FALSE) をコピーします。この参照スタイルはテーブルでは機能しますが、動的配列は返されません。
=VLOOKUP(@A:A,A:C,2,FALSE)

補足説明

Excel 技術コミュニティの専門家にいつでも質問するか、コミュニティでサポートを受けることができます。

関連項目

FILTER 関数

RANDARRAY 関数

SEQUENCE 関数

SORT 関数

SORTBY 関数

UNIQUE 関数

Excel での #スピル! エラー

動的配列とスピル配列の動作

演算子の共通部分: @