スプレッドシートでVLOOKUPやMATCHを使ったら「#N/A」が表示された。こんな経験、ありませんか?
「#N/Aだけ消したいけど、数式ミスまで隠すのは怖い」。そんなときに活躍するのがスプレッドシートのIFNA関数です。
この記事では基本の書き方から実務パターンまで解説します。IFERROR関数との違いもしっかり紹介しますよ。
スプレッドシートのIFNA関数とは?#N/Aエラー専用の処理関数
IFNA関数(読み方: イフエヌエー関数)は、数式の結果が#N/Aエラーのときだけ代わりの値を返す関数です。
「IF」は「もし」、「N/A」は「Not Available(該当なし)」の略です。
たとえば「VLOOKUPで該当なしのときだけ代替値を表示したい」場面です。IFNA関数なら#N/Aだけを処理できます。
それ以外のエラーはそのまま残せますよ。
IFNA関数にできることをまとめると、次のとおりです。
- VLOOKUP関数やMATCH関数の#N/Aを空白やメッセージに置き換える
- #N/A以外のエラー(#REF!や#VALUE!など)はそのまま残す
- 数式ミスによるエラーを見逃さずに済む
- 「検索値が見つからない」ことだけを想定内として処理できる
IFERRORとの最大の違い
IFERROR関数はすべてのエラーをまとめて処理します。一方、IFNA関数は#N/Aだけが対象です。「検索で見つからない」は想定内だけど、「参照先が消えた」「数式が壊れた」は検知したい。そんなときはIFNA関数のほうが安全ですよ。
IFNA関数の書き方(構文・引数)
基本構文
IFNA関数の構文はとてもシンプルです。
=IFNA(値, NA時の値)
引数は2つだけ。IFERROR関数とまったく同じ形なので覚えやすいですよね。
引数の説明
それぞれの引数の意味を表で整理しておきましょう。
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 値 | 必須 | #N/Aかどうかをチェックしたい数式やセル参照 |
| NA時の値 | 任意 | #N/Aだったときに返す値。文字列・数値・数式のいずれもOK |
第2引数を省略するとどうなるでしょうか。Googleスプレッドシートでは空文字列(””)が返ります。
実務では表示したい値を明示するのがおすすめですよ。
TIP
文字列を返す場合はダブルクォーテーションで囲みます。数値を返す場合は囲みません。
最もシンプルな使用例
A2にVLOOKUPの結果が入っているとします。#N/Aのときに「該当なし」と表示してみましょう。
=IFNA(VLOOKUP(A2, D:E, 2, FALSE), "該当なし")
- VLOOKUP(A2, D:E, 2, FALSE): A2の値をD列から検索
- “該当なし”: #N/Aエラー時に表示するテキスト
検索値が見つかれば結果がそのまま返ります。見つからなければ「該当なし」と表示されます。
基本的な使い方3選
基本がわかったところで、仕事でよく使うパターンを見ていきましょう。
#N/Aを空白にする
一番よく使うパターンが、#N/Aを空白に置き換えるケースです。
=IFNA(VLOOKUP(A2, D:E, 2, FALSE), "")
検索値が見つからなかったセルが空白になります。印刷する資料や共有用のシートで重宝しますよ。
#N/Aのときにメッセージを表示する
空白ではなく、わかりやすいメッセージを表示することもできます。
=IFNA(VLOOKUP(A2, D:E, 2, FALSE), "該当なし")
#N/Aの代わりに「該当なし」と表示されます。データが見つからなかったことをひと目で伝えたいときに便利です。
#N/Aのときに数値を返す
数値を返すパターンも実務でよく使います。
=IFNA(VLOOKUP(A2, 単価表!A:B, 2, FALSE), 0)
#N/Aの代わりに0を返します。SUM関数やAVERAGE関数の集計でエラーが止まるのを防げますよ。
#VALUE!や#REF!はどうなる?
IFNA関数は#N/A以外のエラーには反応しません。たとえば参照先を削除して#REF!が発生した場合、そのまま#REF!が表示されます。数式ミスが隠れないので安心ですね。
実務で使える応用パターン
VLOOKUP+IFNAで未登録データを処理する
IFNA関数の最も定番の使い方が、VLOOKUP関数との組み合わせです。
商品コードで商品マスタを検索するケースを考えてみましょう。
=IFNA(VLOOKUP(A2, 商品マスタ!A:C, 3, FALSE), "未登録")
商品コードが見つからなければ「未登録」と表示します。大量データの突合で必須のテクニックですよ。
IFERROR関数でも同じことはできます。ただしIFERRORだと列番号ミスの#REF!も隠れてしまいます。
IFNA関数なら#REF!はそのまま表示されます。不具合に気づけるのがメリットですよ。
INDEX/MATCH+IFNAで柔軟な検索をする
INDEX関数とMATCH関数を組み合わせた検索でも活躍します。
=IFNA(INDEX(C:C, MATCH(E2, A:A, 0)), "該当なし")
「検索列より左側の値を取得する」パターンです。見つからないときだけ「該当なし」を返します。
VLOOKUPでは対応できない検索が必要な場面で使ってみてください。
IFNAのネストで複数テーブルを順番に検索する
第2引数に別のIFNA関数を入れると、複数テーブルを順番に検索できます。
=IFNA(VLOOKUP(A2, シート1!A:B, 2, FALSE), IFNA(VLOOKUP(A2, シート2!A:B, 2, FALSE), "どちらにもなし"))
まずシート1で検索します。#N/Aならシート2を検索します。どちらにもなければ「どちらにもなし」を表示する仕組みです。
ちょっと複雑に見えますが、やっていることはシンプルです。「最初のIFNAが失敗したら次のIFNAを試す」という流れですよ。
IF関数と組み合わせて空白セルを除外する
IF関数とIFNA関数を組み合わせると、入力前のセルを除外できます。
=IF(A2="", "", IFNA(VLOOKUP(A2, D:E, 2, FALSE), "該当なし"))
A2が空白ならそもそも検索しません。値が入っているときだけVLOOKUPを実行します。
入力途中のデータを扱うときに便利なパターンですよ。
IFNA関数とIFERROR関数の違い・使い分け
IFNA関数とIFERROR関数は構文が同じですが、動作が異なります。大きな違いは「処理するエラーの範囲」です。
| 項目 | IFNA | IFERROR |
|---|---|---|
| 対象エラー | #N/Aのみ | 全7種のエラー |
| 主な用途 | VLOOKUP等の「該当なし」だけ処理 | 汎用的なエラー処理 |
| バグ発見 | #N/A以外はそのまま表示される | エラーを隠す可能性あり |
| 構文 | =IFNA(値, NA時の値) | =IFERROR(値, エラー時の値) |
具体的に、同じ数式にミスがあった場合の動作を比較してみましょう。
| 発生したエラー | IFNA関数 | IFERROR関数 |
|---|---|---|
| #N/A(検索値なし) | 代替値を表示 | 代替値を表示 |
| #REF!(参照先削除) | #REF!をそのまま表示 | 代替値を表示 |
| #VALUE!(データ型不正) | #VALUE!をそのまま表示 | 代替値を表示 |
| #NAME?(関数名ミス) | #NAME?をそのまま表示 | 代替値を表示 |
IFERRORだと#REF!や#NAME?も代替値に置き換わります。数式のスペルミスに気づけないリスクがありますよね。
どちらを使うべき?判断基準
使い分けの基準はシンプルです。
- VLOOKUPやMATCHの「該当なし」だけ処理したい → IFNA関数がおすすめ
- 割り算のゼロ除算など複数種のエラーをまとめて処理したい → IFERROR関数が便利
- 数式のバグを見逃したくない → IFNA関数が安全
迷ったらIFNA関数を選んでおくのが安全です。想定外のエラーはそのまま残せるので、デバッグしやすくなりますよ。
よくあるエラーと対処法
IFNA関数自体はシンプルですが、ハマるポイントがあります。
| 症状 | 原因 | 対処法 |
|---|---|---|
| #N/A以外のエラーも処理したい | IFNA関数は#N/Aのみ対象 | IFERROR関数に切り替える |
| #N/Aなのに代替値が表示されない | IFNA関数の外で#N/Aが発生している | #N/Aを返す数式をIFNAの第1引数に直接入れる |
| #NAME?エラーが出る | 関数名のスペルミス | 関数名は IFNA と正確に入力する |
| 意図しない空白が表示される | 第2引数を省略している | 表示したい値(0や”該当なし”など)を明示する |
| #VALUE!がそのまま表示される | IFNA関数は#VALUE!に反応しない(正常動作) | #VALUE!も処理したいならIFERROR関数を使う |
| #REF!がそのまま表示される | IFNA関数は#REF!に反応しない(正常動作) | 参照先のセルやシートが正しいか確認する |
デバッグのコツ
トラブル発生時は、まずIFNA関数を外して中の数式だけをテストしましょう。#N/A以外のエラーが出ていないか確認できます。「エラーが消えない」と思ったら、実は#N/A以外のエラーだったというケースが多いですよ。
まとめ
スプレッドシートのIFNA関数について解説しました。ポイントを振り返りましょう。
- IFNA関数の構文は
=IFNA(値, NA時の値)の2つの引数 - #N/Aエラーだけを処理し、他のエラーはそのまま表示する
- VLOOKUP+IFNAの組み合わせが実務で最も頻出
- INDEX/MATCH+IFNAで柔軟な検索にも対応
- IFERRORとの違いは「対象エラーの範囲」
- 数式のバグを見逃したくないならIFNA関数が安全
まずはVLOOKUP+IFNAから試してみてください。#N/Aだけをきれいに処理しつつ、数式の不具合も見逃しません。
この記事で紹介した関数・関連記事
- スプレッドシートのIFERROR関数の使い方 — 全エラーをまとめて処理
- スプレッドシートのVLOOKUP関数の使い方 — 検索の基本
- スプレッドシートのINDEX関数の使い方 — 柔軟なセル参照
- スプレッドシートのMATCH関数の使い方 — 位置を検索する
- スプレッドシートのIF関数の使い方 — 条件分岐の基本
