ExcelのISNA関数の使い方|#N/Aエラーだけをピンポイントで判定する方法

スポンサーリンク

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))TRUEVLOOKUPが見つからず #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 になっているセルだけを目立たせたい場合に使えます。

  1. 対象範囲を選択します
  2. 「ホーム」タブ →「条件付き書式」→「新しいルール」を選択します
  3. 「数式を使用して、書式設定するセルを決定」を選びます
  4. 数式欄に =ISNA(C2) と入力します
  5. 好きな書式(赤い塗りつぶしなど)を設定します

#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 が活躍します。

使い分けの判断フロー

  1. すべてのエラーを隠したいIFERROR関数
  2. #N/A だけを隠したいIFNA関数
  3. #N/A かどうかを TRUE/FALSE で判定したいISNA関数(この記事)
  4. エラーかどうかを TRUE/FALSE で判定したいISERROR関数
  5. #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 のスペルを確認。ISNAIFNA は別の関数

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つを組み合わせれば、エラーの種類を細かく分類できます。

INDEX+MATCH関数とISNA関数の組み合わせ

VLOOKUPの代わりによく使われる INDEX+MATCH の組み合わせでも、検索値が見つからない場合は #N/A が発生します。ISNA関数との使い方はVLOOKUPと同じ要領で覚えられます。

INDEX+MATCHの基本とISNAの役割

INDEX+MATCH では、MATCH関数が値を見つけられないと #N/A を返します。これをISNA関数で受け取り、IF関数で分岐するパターンが基本です。

=IF(ISNA(MATCH(B2,マスタ!A:A,0)),"未登録",INDEX(マスタ!B:B,MATCH(B2,マスタ!A:A,0)))

B2 の値が「マスタ」シートのA列に存在しなければ「未登録」を表示し、見つかればB列の値を返します。

VLOOKUPとINDEX+MATCHでISNAを使う理由の違い

VLOOKUPでISNAを使う主な理由は「検索値が見つからない場合の処理」です。INDEX+MATCHでも同様ですが、こちらはさらに列番号が固定でなく動的に変わる構成に対応できます。

=IF(
  ISNA(MATCH(B2,マスタ!A:A,0)),
  "該当なし",
  INDEX(マスタ!C:C,MATCH(B2,マスタ!A:A,0))
)

たとえば、マスタの「C列」を参照するこの数式は、VLOOKUPと違いマスタに列を追加しても列番号がずれません。ISNA+IF で囲む書き方はVLOOKUPとまったく同じパターンで使えます。

IFNAで書き換えるとシンプルになる

「#N/A のときだけ代替値を返す」目的であれば、IFNA関数で書き換えるほうが数式が短くなります。

=IFNA(INDEX(マスタ!C:C,MATCH(B2,マスタ!A:A,0)),"該当なし")

INDEX+MATCHを1回しか書かなくてよいので、数式が簡潔になります。ISNAはあくまでも「TRUE/FALSEで判定したい」または「他のエラーは残したい」場面で選ぶ関数です。

ISNA関数のよくある質問(FAQ)

Q1. ISNA関数とIFNA関数は何が違う?

目的が異なります。ISNA関数は「#N/A かどうかを TRUE/FALSE で返すだけ」の判定関数です。エラーを別の値に置き換える機能は持っていません。

一方、IFNA関数は「#N/A のときに代わりの値を返す」置き換え関数です。

=ISNA(VLOOKUP(B2,A:C,2,0))      → TRUE または FALSE
=IFNA(VLOOKUP(B2,A:C,2,0),"なし")  → 見つからなければ「なし」

「#N/A のセルを特定の文字列に変えたい」だけなら IFNA がシンプルです。「#N/A かどうかで処理を分岐したい」「条件付き書式に使いたい」「他のエラーは残したい」場面で ISNA を選びましょう。

Q2. VLOOKUP以外でISNA関数を使うシーンは?

VLOOKUP以外でも、#N/A を返す関数と組み合わせる場面は多くあります。代表的なものを挙げます。

  • MATCH関数: 値が見つからないと #N/A → =IF(ISNA(MATCH(…)),"未登録","登録済み")
  • HLOOKUP関数: 横方向の検索で見つからないと #N/A
  • INDEX+MATCH: MATCHが失敗すると #N/A
  • XMATCH関数: 見つからないと #N/A(XLOOKUP内蔵の場合は発生しにくい)

VLOOKUP以外でも「検索して見つからなかったら #N/A」という挙動の関数は多いので、同じ書き方が流用できます。

Q3. ISNAで TRUE になったセルの数を数えるには?

COUNTIF では直接エラーを数えられませんが、SUMPRODUCT+ISNA で実現できます。

=SUMPRODUCT(ISNA(C2:C100)*1)

ISNA(C2:C100) で範囲全体をTRUE/FALSEの配列に変換し、*1 で数値(1/0)に変えてSUMPRODUCTで合計します。これで「#N/A セルが何件あるか」を一発で確認できます。

Q4. ISNAは Google スプレッドシートでも同じ書き方で使える?

はい。Google スプレッドシートでも =ISNA(値) の構文はまったく同じです。VLOOKUP との組み合わせや、IF+ISNA のパターンも同一の書き方で動作します。

スプレッドシート固有の機能として、ARRAYFORMULAと組み合わせると1つの数式で範囲全体を一括判定できます。

=ARRAYFORMULA(IF(ISNA(VLOOKUP(B2:B100,マスタ!A:C,2,0)),"未登録",VLOOKUP(B2:B100,マスタ!A:C,2,0)))

まとめ

ISNA関数は、セルの値が #N/A エラーかどうかを判定するシンプルな関数です。

  • 引数は1つだけ。#N/A なら TRUE、それ以外なら FALSE
  • #VALUE! や #REF! など他のエラーには反応しない
  • VLOOKUPやMATCHの「見つからない」エラーだけを検知したいときに便利
  • IFERRORとの違いは「#N/A 以外のエラーを残せる」こと
  • 代替値に置き換えるだけなら IFNA関数 のほうがシンプル

IFERRORですべてのエラーをまとめて処理するのが一般的ですが、「#N/A だけを個別に扱いたい」場面ではISNA関数が最適です。ぜひ使い分けてみてください。


関連記事

タイトルとURLをコピーしました