スプレッドシートでVLOOKUPを使っていると、検索値が見つからないときに#N/Aが表示されますよね。
#N/Aは「見つからなかった」という意味のエラーです。#VALUE!や#REF!とは性質が違うので、#N/Aだけを個別に検出したいケースは意外と多いものです。
「#N/Aかどうかだけをチェックしたい」。そんなときに使えるのがISNA関数です。
この記事では基本の書き方からIF関数との組み合わせ、IFNA関数やISERROR・ISERRとの違いまで紹介します。
ISNA関数とは?
ISNA関数(読み方: イズエヌエー関数)は、値が#N/Aエラーかどうかを判定する関数です。
名前はIS(〜かどうか)+ NA(Not Available の略)が由来です。
セルの値が#N/Aなら =ISNA(A1) はTRUEを返します。#N/A以外のエラーや正常な値に対してはFALSEです。
引数はチェックしたい値の1つだけです。結果はTRUEかFALSEの2択なので、とてもシンプルですね。
ISNA関数にできることをまとめると、次のとおりです。
- セルや数式の結果が#N/Aかどうかを判定する
- IF関数と組み合わせて#N/A時の処理を分岐する
- VLOOKUPの「見つからない」だけを検出する(他のエラーはスルー)
- 条件付き書式で#N/Aセルだけを色付けする
NOTE
ISNA関数はGoogleスプレッドシートの全バージョンで使えます。Excelとの互換性も完全なので、ファイルのやり取りでも安心です。
ISNA関数の書き方(構文と引数)
基本構文
=ISNA(値)
カッコの中に#N/Aかどうかを判定したいセルや数式を指定するだけです。
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 値 | 必須 | #N/Aかどうかを確認したいセル参照・数式・値(例: A1、VLOOKUP(…)) |
引数は1つだけです。値が#N/AならTRUE、それ以外はFALSEを返します。
ISNA関数がTRUE/FALSEを返すパターン
どんな値がTRUE(#N/A)と判定されるかを一覧にしました。
| データの種類 | ISNA | ISERR | ISERROR | 違い |
|---|---|---|---|---|
| #N/A | TRUE | FALSE | TRUE | ISNAとISERRORだけTRUE |
| #VALUE! | FALSE | TRUE | TRUE | ISNAはFALSE |
| #REF! | FALSE | TRUE | TRUE | ISNAはFALSE |
| #DIV/0! | FALSE | TRUE | TRUE | ISNAはFALSE |
| #NUM! | FALSE | TRUE | TRUE | ISNAはFALSE |
| #NAME? | FALSE | TRUE | TRUE | ISNAはFALSE |
| #NULL! | FALSE | TRUE | TRUE | ISNAはFALSE |
| 数値(0を含む) | FALSE | FALSE | FALSE | 同じ |
| 文字列 | FALSE | FALSE | FALSE | 同じ |
| 論理値(TRUE/FALSE) | FALSE | FALSE | FALSE | 同じ |
| 空白セル | FALSE | FALSE | FALSE | 同じ |
ISNA関数は#N/Aだけを検出します。他の6種類のエラーにはFALSEを返すのがポイントです。
TIP
全エラーを検出したい場合はISERROR関数、#N/A以外のエラーを検出したい場合はISERR関数を使います。用途に応じて使い分けてみてください。
ISNA関数の基本的な使い方
#N/Aかどうかを判定する
もっともシンプルな使い方です。A1が#N/Aかどうかを確認します。
=ISNA(A1)
A1が#N/AならTRUEを返します。#VALUE!や#REF!などの他のエラーや正常な値ならFALSEです。
IF関数と組み合わせて#N/A時の処理を変える
ISNA関数はIF関数と組み合わせることが多いです。#N/Aのときだけ処理を変えます。
=IF(ISNA(A2), "該当なし", A2)
A2が#N/Aなら「該当なし」と表示します。#N/A以外のエラーや正常な値ならそのまま表示します。
#N/Aを空白に置き換える
VLOOKUPの検索結果で「見つからなかった」ことを非表示にしたいときに使えます。
=IF(ISNA(B2), "", B2)
B2が#N/Aなら空欄にします。#VALUE!や#REF!はそのまま表示されるので、数式の不具合を見逃しません。
条件付き書式で#N/Aセルだけをハイライト
ISNA関数を条件付き書式に使うと、#N/Aのセルだけを色付けできます。
手順:
- 色付けしたい範囲(例: B2:B20)を選択する
- 「表示形式」→「条件付き書式」を開く
- 「カスタム数式」を選び、次の数式を入力する
=ISNA(B2)
- 書式スタイルで背景色を黄色やオレンジに設定する
#VALUE!や#REF!のセルはハイライトされません。「検索値が見つからない」セルだけが目立つので、マスタデータの追加漏れを発見できます。
実務でのISNA関数活用例
VLOOKUPで「見つからない」ときだけメッセージを出す
VLOOKUPの#N/Aは「検索値がマスタにない」という意味です。ISNA関数を使えば、#N/Aだけを検出してメッセージを表示できます。
=IF(ISNA(VLOOKUP(A2, Sheet2!A:C, 3, FALSE)), "マスタ未登録", VLOOKUP(A2, Sheet2!A:C, 3, FALSE))
#N/Aなら「マスタ未登録」と表示します。#VALUE!や#REF!はそのまま表示されるので、数式の不具合にも気づけます。
TIP
#N/Aだけを代替値に置き換えたい場合は、IFNA関数を使うともっとシンプルです。
=IFNA(VLOOKUP(...), "マスタ未登録")で同じ結果になります。
MATCHの検索失敗を検出する
MATCH関数も検索値が見つからないと#N/Aを返します。ISNA関数でチェックしましょう。
=IF(ISNA(MATCH(A2, D:D, 0)), "リストになし", "あり")
A2の値がD列に存在するかどうかを判定します。見つからなければ「リストになし」、見つかれば「あり」と表示します。
ARRAYFORMULAで全行一括判定
ISNA関数をARRAYFORMULA関数と組み合わせると、1つの数式で全行分を処理できます。
=ARRAYFORMULA(IF(ISBLANK(A2:A), "", IF(ISNA(B2:B), "該当なし", B2:B)))
A列にデータがある行だけを対象に、B列の#N/Aをチェックします。#N/Aの行は「該当なし」と表示され、他のエラーはそのまま残ります。
NOT+ISNAで「#N/Aでない行」を抽出
FILTER関数と組み合わせて、#N/Aでない行だけを抽出するパターンです。
=FILTER(A2:C, NOT(ISNA(B2:B)))
B列が#N/Aでない行だけをフィルタして表示します。#VALUE!や#REF!の行も含まれるので、マッチしたデータと数式エラーの両方を確認できます。
ISERROR関数・ISERR関数との違い・使い分け
ISNA関数を理解するには、ISERROR関数とISERR関数との関係を押さえるのがポイントです。
3つの関数の判定範囲
3つの関数はエラーの判定範囲が異なります。
この3つは次のような関係です。
ISERROR = ISERR + ISNA
つまりISERROR関数は、ISERR関数とISNA関数を合わせたものです。
どの関数を使うべきか
実務での使い分けは次のとおりです。
- 全エラーを検出したい → ISERROR関数
- #N/Aは正常扱い、それ以外のエラーだけ検出したい → ISERR関数
- #N/Aだけを検出したい → ISNA関数
- エラー時に代替値を返したい → IFERROR関数
- #N/A時だけ代替値を返したい → IFNA関数
迷ったらISERROR関数から試してみてください。「#N/Aだけ個別に扱いたい」と感じたらISNA関数に切り替えましょう。
ISNA関数とIFNA関数の比較
ISNA関数とセットで覚えたいのがIFNA関数です。どちらも#N/Aの処理に使いますが、役割が異なります。
| 比較項目 | IF+ISNA | IFNA |
|---|---|---|
| 構文の長さ | 長い(数式を2回書く) | 短い(数式は1回) |
| 可読性 | やや複雑 | シンプルで読みやすい |
| TRUE/FALSE判定 | できる | できない |
| 条件付き書式での利用 | 使える | 向かない |
| 処理速度 | 数式が2回評価される | 数式は1回で済む |
代替値を返すだけならIFNA関数がシンプルです。#N/AかどうかのTRUE/FALSE判定が必要ならISNA関数を使いましょう。
似たエラー判定関数まとめ
| 関数 | 判定対象 | 戻り値 | 用途 |
|---|---|---|---|
| ISERROR | 全7種のエラー | TRUE/FALSE | 全エラーの判定 |
| ISERR | #N/A以外の6種 | TRUE/FALSE | #N/Aを正常扱いしたい場合 |
| ISNA | #N/Aのみ | TRUE/FALSE | VLOOKUPの「見つからない」だけ判定 |
| IFERROR | 全7種(判定+代替値) | 任意の値 | エラー時に別の値を返す |
| IFNA | #N/Aのみ(判定+代替値) | 任意の値 | #N/A時だけ別の値を返す |
ISNAと他のIS系関数
ISNA関数はIS系情報関数のひとつです。
| 関数 | 判定内容 |
|---|---|
| ISBLANK | 空白かどうか |
| ISNUMBER | 数値かどうか |
| ISTEXT | 文字列かどうか |
| ISLOGICAL | 論理値かどうか |
| ISERROR | エラーかどうか(全種類) |
| ISERR | エラーかどうか(#N/A除外) |
| ISNA | #N/Aかどうか |
| ISFORMULA | 数式が入っているかどうか |
データの種類に応じたチェックをしたいときは、IS系関数を使い分けてみてください。
よくあるエラーと対処法
ISNA関数自体がエラーを返すことはほとんどありません。ただし「思った結果にならない」ケースがあります。
| 症状 | 原因 | 対処法 |
|---|---|---|
| #VALUE!なのにTRUEになる | ISNAではなくISERROR関数を使っている | 関数名を ISNA に修正する |
| #N/AなのにFALSEになる | #N/Aではなく「#N/A」という文字列が入っている | LEN関数でセル内容を確認する |
| エラーなのにFALSEになる | #N/A以外のエラーが入っている(ISNAは#N/AだけTRUE) | 全エラーを検出したい場合はISERROR関数に変更 |
| TRUEになるがエラーが見えない | 参照先の数式が#N/Aを返している | 数式バーでセルの中身を確認する |
| IFと組み合わせても空白にならない | IF関数の引数の順番が逆 | =IF(ISNA(...), 代替値, 正常時の値) の順番を確認する |
ISNAとISERRORの入力ミスに注意
ISNA関数を使いたいのにISERROR関数を入力してしまうと、#N/A以外のエラーまでTRUEになります。
=ISNA(A1)→ #N/Aだけを判定=ISERROR(A1)→ 全エラーを判定
「#N/Aだけ検出したい」ときに間違えてISERROR関数を使うと、#VALUE!や#REF!もTRUEになってしまいます。関数名をよく確認してから入力しましょう。
まとめ
ISNA関数は、セルや数式の結果が#N/AかどうかをTRUE/FALSEで判定する関数です。
ポイントをおさらいしましょう。
- 引数は1つ。#N/AならTRUE、それ以外はFALSE
- #N/Aだけを検出する(他の6種類のエラーにはFALSEを返す)
- VLOOKUPやMATCHの「見つからない」だけを検出したいときに便利
- ISERRORは全エラー、ISERRは#N/A以外。ISNAは#N/Aだけ
- 代替値を返すだけならIFNA関数のほうがシンプル
#N/Aだけを個別に判定したいときに、ぜひ活用してみてください。
関連記事
#N/Aだけを代替値に置き換えたいなら、IFNA関数の使い方のほうがシンプルです。
全エラーを判定したい場合は、ISERROR関数の使い方をあわせてどうぞ。
#N/A以外のエラーだけを判定したい場合は、ISERR関数の使い方を参考にしてください。
条件によって表示を切り替えたい場合は、IF関数の使い方も便利です。
