Article

【Excel】スピル#N/Aを消す4選|IFNA/XLOOKUP

この記事で分かること

XLOOKUPやVLOOKUPのスピル結果に#N/Aが混ざるときの消し方を、関数別の最短パターンとして整理。第4引数とIFNA外包の使い分け、IFNAで拾えない3種のエラーまでExcel 2024の実機検証で解説します。

ExcelのXLOOKUPやVLOOKUPで検索結果をスピル(配列)として一気に表示すると、マスタに無い値だけ#N/Aが混ざって見た目が崩れることがあります。この#N/Aを消す書き方は、使っている関数によって最短ルートが違います。本記事ではXLOOKUP第4引数・IFNA外包・FILTER第3引数・IFERRORの4パターンを、Excel 2024の実機画面付きで整理します。

本記事はExcel 2024で検証しています。XLOOKUP・FILTER・IFNAなどの基本的なスピル関連の動作は、Microsoft 365 / Excel 2021以降でもおおむね同じ挙動です。一方、BYROW・LAMBDA・HSTACK・VSTACKなど一部の新しい関数はMicrosoft 365 / Excel 2024環境向けで、Excel 2021には含まれていないか挙動が異なる場合があります。
スピル配列の #N/A を消す4つのパターン: XLOOKUP第4引数・IFNA外包・FILTER第3引数・IFERROR の使い分け
関数別に最短の書き方を選ぶ

結論: 関数別に最短の書き方が決まっている

スピル配列で#N/Aを消す方法は、次の4パターンに整理できます。使っている関数から逆引きしてください。

使っている関数最短の書き方代替値の自由度
XLOOKUP第4引数 "該当なし"スカラのみ(配列は不可)
VLOOKUP・INDEX+MATCH・LOOKUPIFNAで外包スカラ・配列どちらも可
HSTACK・VSTACK・BYROW の合成配列IFNAで全体を外包スカラ・配列どちらも可
FILTER(空結果で#CALC!)第3引数 "該当なし"スカラ・配列どちらも可
スピル配列に #N/A が混ざったときの書き方を選ぶ決定フロー図
関数から逆引きできる決定フロー

念のため1万行規模で計算時間を実測したところ、XLOOKUP単体・XLOOKUP第4引数・IFNA外包・IFERROR外包のいずれも、手元のExcel 2024環境では体感差はありませんでした(測定条件によっては揺れます)。速度で選ぶ必要はなく、可読性と機能(配列代替の要否など)で決めて構いません。

XLOOKUPのスピル#N/Aは第4引数が最短

XLOOKUP関数は、第4引数に「見つからない場合の代替値」を直接書けます。検索値を配列で渡してスピルしているときも、第4引数が配列全体のどの#N/Aにも効きます

XLOOKUPで検索値配列E2:E6を渡し、マスタに無い999・888の行だけ#N/Aが混ざるスピル結果の画面
第4引数なし: マスタに無いIDで#N/Aが混ざる
=XLOOKUP(E2:E6,A2:A6,B2:B6,"該当なし")
XLOOKUPの第4引数に該当なしを指定することで、スピル配列の#N/Aが該当なしに置き換わった画面
第4引数を付けるだけで配列全体に効く

代替値を行ごとに変えたい場合だけ、IFNAに切り替えます。XLOOKUP第4引数は配列を受け付けず、配列を渡すと#VALUE!になるため、行別の代替値にはIFNAの第2引数が必要です。

=IFNA(XLOOKUP(E2:E6,A2:A6,B2:B6),G2:G6)
IFNAの第2引数に代替値配列G2:G6を渡して、未存在IDごとに異なる代替値(対象外・確認中など)をスピル結果に差し込んだ画面
行別に違う代替値を出したいときはIFNA
XLOOKUPの第4引数はスカラ専用で、配列を渡すと#VALUE!になります。行別の代替値が必要ならIFNA外包に切り替えてください。

VLOOKUP・INDEX+MATCHはIFNAで外包する

XLOOKUP以外のルックアップ関数(VLOOKUP、INDEX+MATCH、LOOKUPなど)には「見つからない場合の代替値」引数がありません。これらを使う場合はIFNA関数でスピル配列全体を包むのが最短です。

Excel 2024(Microsoft 365)では、VLOOKUPに配列の検索値を渡すと自然にスピルします。旧形式の「1セル1検索値」の感覚から離れて、配列ごと一気にIFNAで包めます。

=IFNA(VLOOKUP(E2:E6,A2:C6,2,FALSE),"該当なし")
VLOOKUPに配列の検索値を渡してスピルさせ、IFNAで外包することで#N/Aを該当なしに置き換えたスピル結果の画面
VLOOKUPも配列検索でスピルする(Excel 2024)
=IFNA(INDEX(B2:B6,MATCH(E2:E6,A2:A6,0)),"該当なし")
INDEXとMATCHを組み合わせて配列検索でスピルさせ、IFNAで#N/Aを該当なしに置き換えた画面
INDEX+MATCHも配列で展開 → IFNAで一括処理
VLOOKUPを配列で使う書き方はExcel 2024(Microsoft 365)の動的配列対応版で安定して動きます。旧バージョンのExcel 2019やExcel 2016に送るファイルでは、従来通り1セル1検索値の形に書き直してください。

HSTACK・VSTACK・BYROWの合成配列はIFNAで一括処理

2列以上の結果をまとめて取りたいときや、BYROWとLAMBDAで行単位に処理したいときは、合成後の配列にIFNAを1つだけ付けるのが最短です。各関数ごとに代替値を書く必要はありません。

=IFNA(HSTACK(XLOOKUP(E2:E6,A2:A6,B2:B6),XLOOKUP(E2:E6,A2:A6,C2:C6)),"該当なし")
HSTACKで氏名列と部署列の2つのXLOOKUPを水平結合した上で、IFNAで外包して両列の#N/Aをまとめて該当なしにした画面
HSTACKで2列まとめ、IFNAで全体を1回処理

なお、XLOOKUPの戻り範囲に複数列を指定して配列検索をするとスピルは先頭1列分しか展開されません。複数列が必要ならHSTACKで個別に並べるのが確実です。

=IFNA(BYROW(E2:E6,LAMBDA(x,XLOOKUP(x,A2:A6,B2:B6))),"該当なし")
BYROWとLAMBDAでXLOOKUPを行ごとに呼び、IFNAで外包することで#N/Aを該当なしに置き換えた画面
BYROW+LAMBDAの結果もIFNAで包める

FILTERの空結果は第3引数で処理する(IFNAでは拾えない)

FILTER関数は条件に一致する行が0件だと#CALC!エラーを返します。このエラーはIFNAでは拾えません。FILTERには「空の場合」を渡す専用の第3引数があるので、そちらを使ってください。

=FILTER(B2:B6,A2:A6>10000,"該当なし")
FILTERが空結果で#CALC!を返し、IFNAで囲んでも#CALC!のままで、FILTER第3引数だけが該当なしを表示する3列の比較画面
IFNAはFILTERの#CALC!を拾わない(第3引数で対処)

FILTERの基本的な使い方や複数条件、IFERRORで包んだ場合のデメリットは、ExcelのFILTER関数の使い方で詳しく解説しています。

IFNAで拾えない3種のエラー

IFNAは#N/A専用です。#N/A以外のエラーはそのまま通過します。次のエラーはIFNAでは消せません。

エラーIFNAで拾えるIFERRORで拾える推奨の対処
#N/AXLOOKUP第4引数 / IFNA外包
#CALC!(FILTER空など)×FILTER第3引数
#DIV/0!×分母をIFで判定
#VALUE!×型の見直し
#REF!×参照の見直し
=1/0で発生する#DIV/0!をIFNAで囲んでもそのまま残り、IFERRORなら代替文字列に置き換わる比較画面
#DIV/0!はIFNAでは拾えない(IFERRORなら可能)

IFERRORは万能に見えますが、全種類のエラーを無差別に握り潰す副作用があります。本来は#DIV/0!で気付くはずだった分母ゼロや、#REF!で気付くはずだった参照切れまで見えなくなるため、普段は#N/Aだけを意図的に処理するIFNAを優先する方が安全です。

スピル範囲に書き込むと親セルが#SPILL!で崩壊する

「#N/Aが出ている行だけ手で書き換えればいい」と考えて、スピル範囲の中に別の値や式を入れると、スピル全体が壊れます。親セル(アンカー)が#SPILL!に変わり、それ以降のセルの展開が止まります。

G2セルのXLOOKUPスピル範囲内にあるG3に別の値を書き込んだ結果、親のG2アンカーが#SPILL!に変化してスピルが崩壊した画面
スピル範囲内への書込は親セルを#SPILL!にする

直し方はシンプルで、スピル範囲内に入れてしまったセルを削除すれば、親セルのスピルが自動で復活します。スピル結果を編集したいときは、常に親セルの式を書き換えるのが鉄則です。

スピルそのものの仕組みや、結合セル・テーブル内など他の#SPILL!原因はエラー値「#スピル!」の発生原因と解決方法にまとめています。

応用: ISNAでスピル全体のTRUE/FALSE配列を作る

ISNA関数もスピルに対応しているため、#N/Aかどうかの真偽値配列を一気に作れます。未存在の件数カウントや、条件付き書式でのハイライトに使えます。

=SUMPRODUCT(--ISNA(XLOOKUP(E2:E6,A2:A6,B2:B6)))
XLOOKUPのスピル結果にISNAを適用してTRUE/FALSE配列を作り、SUMPRODUCTで未存在件数を数えた画面
ISNAのTRUE/FALSE配列で未存在件数を集計

条件付き書式で使う場合は、適用範囲を選んで「数式を使用して書式設定するセルを決定」を選び、次の式を入力します(先頭セルが$Gの行であれば$を付けて列を固定)。

=ISNA($G2)
条件付き書式で#N/Aの行だけ背景と文字色が赤に変わり、未存在IDが一目で分かるようにハイライトされた画面
条件付き書式で#N/A行をハイライト

コピペ用定型式10本

業務でそのまま使える書き方を10本まとめました。セル範囲は実際のデータに合わせて書き換えてください。

=XLOOKUP(E2:E6,A2:A6,B2:B6,"該当なし")
=IFNA(XLOOKUP(E2:E6,A2:A6,B2:B6),G2:G6)
=IFNA(VLOOKUP(E2:E6,A2:C6,2,FALSE),"該当なし")
=IFNA(INDEX(B2:B6,MATCH(E2:E6,A2:A6,0)),"該当なし")
=IFNA(HSTACK(XLOOKUP(E2:E6,A2:A6,B2:B6),XLOOKUP(E2:E6,A2:A6,C2:C6)),"該当なし")
=IFNA(BYROW(E2:E6,LAMBDA(x,XLOOKUP(x,A2:A6,B2:B6))),"該当なし")
=FILTER(B2:B6,A2:A6>10000,"該当なし")
=SUMPRODUCT(--ISNA(XLOOKUP(E2:E6,A2:A6,B2:B6)))
=AVERAGE(IFNA(XLOOKUP(E2:E6,A2:A6,B2:B6),""))
=ISNA($G2)

よくある質問

XLOOKUPの第4引数とIFNA外包はどちらが推奨ですか

スカラの代替値で済むなら第4引数が最短です。行ごとに違う代替値を出したい場合だけIFNAに切り替えてください。1万行規模で計算時間を測っても、両者に体感差はありませんでした。

VLOOKUPはスピル時代でも使えますか

Excel 2024(Microsoft 365)では、VLOOKUPに配列の検索値を渡すとそのままスピルします。ただしExcel 2019・2016など動的配列非対応の環境で開かれるファイルでは旧来の書き方に戻してください。

IFERRORとIFNAはどう使い分けますか

IFNAは#N/A専用、IFERRORは全エラー対応です。IFERRORは#DIV/0!や#REF!などのバグも無差別に握り潰してしまうため、本来は気付きたい別のエラーが見えなくなるリスクがあります。意図が明確なIFNAを優先してください。

スピル範囲を選択してからIFNAを入れれば効きますか

スピル範囲に別の式を入力するとアンカーが#SPILL!で崩壊するため、この方法は使えません。必ず親セル(アンカー)の式を=IFNA(...)の形に書き換えてください。

まとめ

  • XLOOKUPはスカラ代替なら第4引数、行別代替ならIFNA外包
  • VLOOKUP・INDEX+MATCH・LOOKUPはIFNA外包一択(Excel 2024は配列検索でスピルする)
  • HSTACK・VSTACK・BYROWで合成した配列は外側にIFNAを1つ
  • FILTERの空結果は#CALC!になるため第3引数で対処する
  • IFNAは#N/A専用で、#CALC!・#DIV/0!・#VALUE!は拾えない
  • IFERRORは全エラー対応だが、バグを隠蔽するリスクがある
  • スピル範囲の個別セルに書き込むと親アンカーが#SPILL!で崩壊する

XLOOKUPの基本的な使い方はXLOOKUP関数の使い方、複数条件での検索はExcelでXLOOKUP関数の複数条件検索を行う方法、XLOOKUPで複数列をまとめて取りたいときはXLOOKUP関数で複数列のスピル配列検索結果を作成する方法を参照してください。

IFERROR による全エラー一括処理と IFNA による #N/A 限定処理の使い分け、スピル範囲に IFERROR をかける場合の挙動については、IFERROR 関数 完全リファレンス で詳しく解説しています。

TEXTSPLIT で分割した結果から「2 番目」「最後」「N 番目」の要素を INDEX や TAKE / DROP で取り出したい場合は、Excel TEXTSPLITで2番目・最後・N番目の要素を取り出す(6パターン) もあわせてご覧ください。CHOOSECOLS / INDEX / TAKE+DROP / TEXTBEFORE+AFTER / BYROW など 6 パターンで使い分ける方法をまとめています。

Next Read

このあと読む記事

今の内容に近い記事から、次の1本と補助記事を続けて見つけられるようにしています。

Keep Exploring

このテーマをさらに探す

同じテーマの入口記事と更新記事を、一覧の形でまとめています。

コメント