VLOOKUPやMATCH関数を使ったら「#N/A」がセルに表示された……。検索系の関数ではよくあることですよね。
IFERROR関数でまとめて消す方法もありますが、それだと #VALUE! や #REF! のような「数式自体のミス」まで隠れてしまいます。「#N/A だけを検知して、他のエラーは残しておきたい」。そんなときに活躍するのが ISNA関数 です。
この記事では、ISNA関数の基本から、VLOOKUPとの組み合わせ、IFERROR・IFNAとの使い分けまで、実例付きでまるっと解説します。
ISNA関数とは?#N/Aエラーを判定する関数
ISNA(イズ エヌエー)関数は、指定した値が #N/Aエラーかどうか を判定する関数です。NAは「Not Available(利用できない)」の略で、主にVLOOKUPやMATCHで検索値が見つからなかったときに表示されます。
対象が #N/A エラーであれば TRUE を返し、それ以外の値(数値・文字列・他のエラーなど)はすべて FALSE を返します。
IS系(情報関数)の1つで、セルに入っているデータの種類を確認するための関数ファミリーに属しています。
NOTE
ISNA関数は Excel 2003 以降のすべてのバージョンで使用できます。Microsoft 365 や Google スプレッドシートでも同じ書き方で利用可能です。
ISNAの戻り値はTRUE/FALSEだけ
ここがポイントです。ISNA関数は「#N/A かどうか」をTRUE/FALSEで返すだけの判定関数です。エラーを別の値に置き換える機能はありません。
エラーを代替値に置き換えたい場合は、IFNA関数やIFERROR関数を使います。ISNAは「#N/A かどうかを知りたい」「条件分岐に使いたい」場面で力を発揮します。
ISNA関数の書き方(構文と引数)
基本構文
=ISNA(テストの対象)
引数の説明
| 引数 | 必須/省略可 | 説明 |
|---|---|---|
| テストの対象 | 必須 | #N/A エラーかどうか判定したい値またはセル参照 |
引数は1つだけで、省略はできません。セル参照・直接値・数式の結果のいずれも指定できます。
ISNA関数の基本的な使い方
まずはシンプルな例で動きを確認してみましょう。
値の種類ごとの判定結果
さまざまなデータをISNA関数で判定すると、次のような結果になります。
| 数式 | 結果 | 理由 |
|---|---|---|
=ISNA(#N/A) | TRUE | #N/A エラーそのもの |
=ISNA(VLOOKUP("存在しない値",A:B,2,FALSE)) | TRUE | VLOOKUPが見つからず #N/A を返す |
=ISNA(100) | FALSE | 数値 |
=ISNA("東京") | FALSE | 文字列 |
=ISNA(1/0) | FALSE | #DIV/0! エラー(#N/A ではない) |
=ISNA(#VALUE!) | FALSE | #VALUE! エラー(#N/A ではない) |
=ISNA(#REF!) | FALSE | #REF! エラー(#N/A ではない) |
TIP
ISNAは #N/A だけ に反応します。#VALUE! や #REF! などの他のエラーには FALSE を返す点がポイントです。すべてのエラーをまとめて判定したい場合は ISERROR関数 を使いましょう。
セル参照で判定する
セル参照を使えば、特定のセルが #N/A エラーかどうかを確認できます。
=ISNA(A1)
A1 に #N/A が表示されていれば TRUE です。数値や文字列、他のエラーなら FALSE になります。
ISNA関数の実務活用パターン
パターン1: VLOOKUPの#N/Aだけを判定して処理を分岐する
VLOOKUPで検索値が見つからなかったときだけ、メッセージを表示する使い方です。
=IF(ISNA(VLOOKUP(B2,商品マスタ!A:C,2,FALSE)),"該当なし",VLOOKUP(B2,商品マスタ!A:C,2,FALSE))
B2 の値がマスタに存在しなければ「該当なし」と表示します。見つかった場合はVLOOKUPの結果をそのまま返します。
この書き方の最大のメリットは、#N/A 以外のエラーがそのまま表示される こと。たとえば列番号の指定ミスで #REF! が出た場合、エラーが隠れずにすぐ気付けます。
TIP
この書き方だとVLOOKUPを2回実行するため、データ量が多いと処理が遅くなることがあります。単にエラーを置き換えるだけなら IFNA関数 のほうがシンプルです。ISNAは「判定結果をTRUE/FALSEで受け取りたい」場面で選びましょう。
パターン2: #N/Aだけ処理して他のエラーは残す
IFERROR関数を使うと、すべてのエラーがまとめて置き換えられます。しかし #REF! や #VALUE! のように「数式そのものに問題がある」エラーは残しておきたいケースもありますよね。
=IF(ISNA(VLOOKUP(B2,A:C,3,FALSE)),"未登録",VLOOKUP(B2,A:C,3,FALSE))
#N/A(検索値が見つからない)のときだけ「未登録」と表示します。参照先の列がずれて #REF! が出た場合はエラーがそのまま表示されるので、問題に気付けます。
これがISNA関数とIFERROR関数の最大の違いです。
パターン3: MATCH関数と組み合わせてリストの存在チェック
商品コードや社員番号がマスタに存在するかどうかを確認する場面で使えます。
=IF(ISNA(MATCH(B2,マスタ!A:A,0)),"未登録","登録済み")
MATCH関数は値が見つからないと #N/A を返します。ISNAで判定すれば「マスタにあるか・ないか」を表示できますよ。
パターン4: COUNTIFで代用できないケースでの存在チェック
COUNTIF関数でも存在チェックはできますが、完全一致の検索で「ワイルドカードを無効にしたい」場合はMATCH+ISNAが安全です。
=IF(ISNA(MATCH(B2,A2:A100,0)),"なし","あり")
COUNTIFでは や ? がワイルドカードとして扱われます。コード値に を含むデータがある場合、MATCH+ISNAなら誤判定を防げます。
パターン5: 条件付き書式で#N/Aセルをハイライトする
VLOOKUPの結果列で #N/A になっているセルだけを目立たせたい場合に使えます。
- 対象範囲を選択します
- 「ホーム」タブ →「条件付き書式」→「新しいルール」を選択します
- 「数式を使用して、書式設定するセルを決定」を選びます
- 数式欄に
=ISNA(C2)と入力します - 好きな書式(赤い塗りつぶしなど)を設定します
#N/A のセルだけが色付きになります。他のエラー(#REF! など)は色が付かないので、問題の種類を区別できます。
ISNAとIFERROR・IFNA・ISERRORの違い
#N/A エラーの処理に使える関数は複数あります。それぞれの違いを把握しておくと、場面に応じて最適な関数を選べますよ。
比較表
| 関数 | 対象エラー | 戻り値 | 主な用途 |
|---|---|---|---|
| ISNA(この記事) | #N/A のみ | TRUE / FALSE | #N/A だけを判定。他のエラーは残す |
| ISERROR | すべてのエラー | TRUE / FALSE | エラーかどうかをTRUE/FALSEで返す |
| ISERR | #N/A 以外のエラー | TRUE / FALSE | #N/A を除くエラーを判定する |
| IFERROR | すべてのエラー | 代替値 | エラー時に指定した値を返す |
| IFNA | #N/A のみ | 代替値 | #N/A 時に指定した値を返す |
NOTE
「エラーを代替値に置き換えたいだけ」なら IFERROR や IFNA のほうがシンプルです。「#N/A かどうかを TRUE/FALSE で知りたい」「他のエラーはそのまま残したい」場面で ISNA が活躍します。
使い分けの判断フロー
- すべてのエラーを隠したい → IFERROR関数
- #N/A だけを隠したい → IFNA関数
- #N/A かどうかを TRUE/FALSE で判定したい → ISNA関数(この記事)
- エラーかどうかを TRUE/FALSE で判定したい → ISERROR関数
- #N/A 以外のエラーを判定したい → ISERR関数
XLOOKUPならISNAが不要になるケースも
Microsoft 365 や Excel 2021 以降で使える XLOOKUP関数 には、第4引数で「見つからなかったときの値」を直接指定できます。
=XLOOKUP(B2,商品マスタ!A:A,商品マスタ!C:C,"該当なし")
この書き方なら、IF+ISNAの組み合わせや、IFNA関数も不要になります。XLOOKUPが使える環境なら検討してみてください。
ただし、「#N/A かどうかを条件分岐に使いたい」「条件付き書式に使いたい」といった場面では、XLOOKUPでもISNA関数は引き続き必要です。
よくあるエラーと対処法
ISNA関数自体がエラーを返すことはほとんどありません。ただし「思った結果にならない」ケースがあるので、確認しておきましょう。
| 症状 | 原因 | 対処法 |
|---|---|---|
| #VALUE! で TRUE が返らない | ISNA は #N/A のみ判定する | 全エラーを判定するには ISERROR関数 を使う |
| #REF! で TRUE が返らない | ISNA は #N/A 以外のエラーに FALSE を返す | すべてのエラーをまとめて処理するなら IFERROR関数 が便利 |
| VLOOKUPの結果で FALSE が返る | 検索値が見つかっている(#N/A ではない) | VLOOKUPが値を返せているなら正常動作 |
| 空白セルで FALSE が返る | 空白は #N/A ではない | 空白判定には ISBLANK関数 を使う |
| 数式で #NAME? が表示される | 関数名のスペルミス | ISNA のスペルを確認。ISNA と IFNA は別の関数 |
IS系12関数の違い・使い分け
IS系関数は、セルに入っているデータの種類を判定するファミリーです。用途に合わせて使い分けましょう。
| 関数名 | 判定内容 | TRUE になる例 |
|---|---|---|
| ISBLANK | 空白セルか | 未入力のセル |
| ISERROR | 任意のエラー値か | #N/A, #VALUE!, #REF! など |
| ISERR | #N/A 以外のエラー値か | #VALUE!, #REF!, #DIV/0! など |
| ISNA(この記事) | #N/A エラーか | #N/A のみ |
| ISLOGICAL | 論理値(TRUE/FALSE)か | TRUE, FALSE |
| ISNUMBER | 数値か | 100, 3.14, 日付のシリアル値 |
| ISTEXT | 文字列か | “東京”, “123”(文字列型) |
| ISNONTEXT | 文字列以外か | 100, TRUE, 空白 |
| ISFORMULA | 数式が入っているか | =SUM(A1:A10) が入ったセル |
| ISREF | 有効なセル参照か | A1, Sheet2!B3 |
| ISEVEN | 偶数か | 2, 4, 100 |
| ISODD | 奇数か | 1, 3, 99 |
TIP
ISNA関数と対になるのは ISERR関数 です。ISNAが「#N/A だけ TRUE」なのに対し、ISERRは「#N/A 以外のエラーで TRUE」を返します。この2つを組み合わせれば、エラーの種類を細かく分類できます。
まとめ
ISNA関数は、セルの値が #N/A エラーかどうかを判定するシンプルな関数です。
- 引数は1つだけ。#N/A なら TRUE、それ以外なら FALSE
- #VALUE! や #REF! など他のエラーには反応しない
- VLOOKUPやMATCHの「見つからない」エラーだけを検知したいときに便利
- IFERRORとの違いは「#N/A 以外のエラーを残せる」こと
- 代替値に置き換えるだけなら IFNA関数 のほうがシンプル
IFERRORですべてのエラーをまとめて処理するのが一般的ですが、「#N/A だけを個別に扱いたい」場面ではISNA関数が最適です。ぜひ使い分けてみてください。
