VLOOKUPで検索したら、セルに「#N/A」がズラッと並んでしまった…。そんな経験、ありませんか?
見栄えが悪いだけでなく、そのまま集計に使うと合計や平均もエラーになってしまいます。かといって、IFERROR関数で全エラーをまとめて消すと、数式ミスまで隠れてしまうリスクがあるんですよね。
そこで活躍するのが IFNA関数 です。#N/Aエラーだけをピンポイントで処理できるので、安全にエラー表示をコントロールできますよ。この記事では、IFNA関数の基本から、VLOOKUPとの組み合わせ、IFERRORとの違いまでまるっと解説します。
IFNA関数とは?何をする関数か
IFNA関数は、数式の結果が #N/Aエラーのときだけ 別の値を返す関数です。Excel 2013で追加されました。
Excelのエラーは全部で7種類あります。
#N/A— 検索値が見つからない#VALUE!— データ型が不正#REF!— 参照先が無効#DIV/0!— ゼロ除算#NAME?— 関数名のスペルミス#NUM!— 数値が範囲外#NULL!— 範囲指定が不正
IFNA関数が処理するのは、この中の #N/Aだけ です。残り6つのエラーはそのまま表示されます。つまり、数式のミスに気づける安全な設計になっているんですよね。
読み方・意味
読み方は「イフ・エヌエー」です。「IF + N/A」の略で、「もし#N/Aだったら」という意味になります。
書式と引数
=IFNA(値, NAの場合の値)
| 引数 | 必須/省略可 | 説明 |
|---|---|---|
| 値 | 必須 | #N/Aかどうか判定する数式やセル参照 |
| NAの場合の値 | 省略可 | #N/Aだったときに返す値。省略すると0が返る |
第2引数を省略すると 0 が返ります。空白にしたい場合は "" を明示的に指定してください。この省略時の挙動はうっかりミスしやすいポイントですよ。
IFNA関数の基本的な使い方
まずはシンプルな使い方から見ていきましょう。
#N/Aエラーを空白にする
検索結果が見つからないとき、セルを空白のままにしたいケースは多いですよね。
=IFNA(VLOOKUP(A2,商品マスタ,2,FALSE),"")
第2引数に "" を指定するだけです。VLOOKUPが#N/Aを返したとき、セルには何も表示されません。報告書や請求書など、見た目を整えたいときに便利ですよ。
#N/Aエラーをメッセージに変える
空白ではなく、「該当なし」「未登録」のようなメッセージを表示したいこともあります。
=IFNA(VLOOKUP(A2,商品マスタ,2,FALSE),"未登録")
こうすれば、検索値がマスタにないことがひと目でわかります。データの抜け漏れチェックにも使えるので、ぜひ試してみてください。
#N/Aエラーを0にする
集計用の列で、見つからない場合は0として扱いたいケースもあります。
=IFNA(VLOOKUP(A2,価格表,3,FALSE),0)
第2引数に 0 を指定すれば、SUM関数やAVERAGE関数でエラーにならず集計できます。なお、第2引数を省略しても0が返りますが、「意図して0にした」ことを明示するために書いておくのがおすすめですよ。
VLOOKUP+IFNAの実践パターン
ここからは、実務でよく使う組み合わせパターンを紹介します。
未登録データの検索処理
たとえば、受注リストの商品コードを商品マスタから検索する場面を考えてみましょう。
サンプルデータ(商品マスタ)
| 商品コード | 商品名 | 単価 |
|---|---|---|
| A001 | ボールペン | 150 |
| A002 | ノート | 300 |
| A003 | 消しゴム | 100 |
受注リストにある商品コード「A004」を検索すると、マスタに存在しないので#N/Aになります。IFNAで処理すると次のようになります。
=IFNA(VLOOKUP("A004",商品マスタ,2,FALSE),"未登録商品")
この数式は「未登録商品」と返します。#N/Aがそのまま表示されるよりも、何が起きているか一目瞭然ですよね。
INDEX+MATCH+IFNAで柔軟に検索する
VLOOKUP関数は検索列が左端でないと使えません。そんなときはINDEX関数(指定した行列の値を返す関数)とMATCH関数(検索値の位置を返す関数)の組み合わせが便利です。
=IFNA(INDEX(B2:B10,MATCH(E2,A2:A10,0)),"該当なし")
INDEX+MATCHでも検索値が見つからなければ#N/Aが発生します。IFNAで囲んでおけば安心ですよ。
IFNAのネストで複数テーブルを順番に検索
「まずテーブルAを検索して、なければテーブルBを検索する」という処理もIFNAで実現できます。
=IFNA(VLOOKUP(A2,テーブルA,2,FALSE),IFNA(VLOOKUP(A2,テーブルB,2,FALSE),"どちらにも該当なし"))
ちょっとむずかしく見えますが、やっていることはシンプルです。外側のIFNAの第2引数に、もう一つのIFNA+VLOOKUPを入れているだけです。テーブルAで見つかればその値を返し、見つからなければテーブルBを検索します。テーブルBにもなければ「どちらにも該当なし」を返します。
この書き方は、部署マスタと旧部署マスタを両方検索する場面などで重宝しますよ。
IFERRORとIFNA|どちらを使うべきか(比較表)
「IFERRORで十分じゃない?」と思う方も多いかもしれません。結論から言うと、検索系の関数と組み合わせるならIFNAのほうが安全 です。
| 比較項目 | IFNA | IFERROR |
|---|---|---|
| 処理するエラー | #N/Aのみ | 全7種類 |
| 数式ミスの検出 | できる(#N/A以外はそのまま表示) | できない(すべて隠れる) |
| 登場バージョン | Excel 2013〜 | Excel 2007〜 |
| おすすめ用途 | VLOOKUP・MATCH・XLOOKUPなど検索系 | QUOTIENT・除算など#DIV/0!対策 |
たとえば、VLOOKUPの第3引数(列番号)を間違えて#REF!が出たとします。IFERRORで囲んでいると、このミスは空白や0に置き換えられて気づけません。IFNAなら#REF!はそのまま表示されるので、すぐに修正できます。
使い分けのポイントは次のとおりです。
- 検索系の関数(VLOOKUP・MATCH・INDEX+MATCHなど)→ IFNA を使う
- 計算系の関数(除算・QUOTIENT・数値変換など)→ IFERROR を使う
- 全エラーをまとめて処理したい → IFERROR を使う
迷ったらIFNAを選ぶほうが安全ですよ。エラーを必要以上に隠さない設計は、あとからのトラブル防止につながります。
なお、ISNA関数(#N/Aかどうかを判定する関数)とIF関数を組み合わせる古い書き方もあります。
=IF(ISNA(VLOOKUP(A2,商品マスタ,2,FALSE)),"未登録",VLOOKUP(A2,商品マスタ,2,FALSE))
この書き方だとVLOOKUPを2回書く必要があり、数式が長くなります。IFNAなら1回で済むので、こちらを使うのがおすすめです。IF系関数の使い分けについては、IF・IFS・IFERROR・IFNAの使い分けの記事も参考にしてみてください。
XLOOKUPなら第4引数でIFNA不要(移行ガイド)
Excel 2021やMicrosoft 365で使えるXLOOKUP関数なら、第4引数で「見つからなかった場合の値」を直接指定 できます。IFNAで囲む必要がなくなるんです。
=XLOOKUP(A2,商品コード列,商品名列,"未登録")
VLOOKUP+IFNAで書いていた処理が、XLOOKUPなら1つの関数で完結します。数式がスッキリしますよね。
ただし、XLOOKUPはExcel 2019以前のバージョンでは使えません。社内でExcelのバージョンが混在している場合は、VLOOKUP+IFNAの書き方を使ったほうが安全です。
移行の目安をまとめておきます。
- 全員がExcel 2021以降 or Microsoft 365 → XLOOKUPに移行してOK
- Excel 2019以前のユーザーがいる → VLOOKUP+IFNAを継続
- Googleスプレッドシートと共有 → XLOOKUPは対応済みなので移行可能
IFNA関数のよくあるエラーと対処法
IFNA関数自体はシンプルですが、使い方を間違えるとハマるポイントがあります。
第2引数を省略して意図しない0が表示される
=IFNA(VLOOKUP(A2,商品マスタ,2,FALSE))
この数式は、#N/Aのとき0を返します。空白にしたいなら "" を明示的に指定してください。
IFNAの中にIFNAの対象でない数式を入れてしまう
IFNAは#N/Aしか処理しません。割り算の#DIV/0!を処理したいときは、IFERROR関数かISERROR関数を使ってください。
VLOOKUP側の引数ミスに気づかない
IFNAは#N/Aだけ処理するので、VLOOKUPの引数ミスによる#REF!や#VALUE!はそのまま表示されます。これはIFNAの「安全機能」です。エラーが出たら、IFNA側ではなくVLOOKUP側の引数を確認してみてください。
まとめ
IFNA関数は、#N/Aエラーだけを安全に処理できる関数です。ポイントをおさらいしておきましょう。
- 書式:
=IFNA(値, NAの場合の値)— 引数は2つだけ - 処理対象: #N/Aエラーのみ。他の6種類のエラーはスルーする
- VLOOKUPとセット: 検索系の関数と組み合わせるのが定番
- IFERRORとの違い: IFERRORは全エラー処理、IFNAは#N/Aだけ処理
- XLOOKUPなら不要: 第4引数で代替できる(Excel 2021以降)
- 第2引数の省略に注意: 省略すると0が返る。空白にしたいなら
""を指定
VLOOKUPやMATCHを使う場面では、IFERRORよりIFNAを選ぶクセをつけておくと、数式ミスの見落としを防げますよ。ぜひ普段の業務で活用してみてください。
