VLOOKUPやINDEX/MATCHでデータを検索するとき、該当する値が見つからずに#N/Aエラーが表示されることがあります。このエラーだけを無視して他のエラーは残したい場合、ISNA関数を使うと便利です。ISNA関数はセルの値が#N/AエラーかどうかをTRUEまたはFALSEで返す関数で、IF関数と組み合わせることでエラー種別を細かく制御できます。この記事ではISNA関数の基本的な使い方から、IFやIFERRORとの違い、実際の活用例までを解説します。
【要点】ISNA関数で#N/Aエラーを正確に判定し、他のエラーと区別する方法
- =ISNA(セル): セルが#N/Aエラーの場合にTRUEを返します。#N/A以外のエラーや通常の値にはFALSEを返します。
- =IF(ISNA(A2),”該当なし”,A2): VLOOKUP結果などに対して、#N/Aのときだけ代替テキストを表示します。他のエラーはそのまま表示されます。
- =IFERROR(A2,”エラー”)との違い: IFERRORはすべてのエラーを対象にしますが、ISNAは#N/Aだけを対象にします。必要なエラーだけを制御したい場合にISNAを使います。
ADVERTISEMENT
目次
ISNA関数の概要とできること
ISNA関数は、指定したセルや式の結果が「#N/A」エラーかどうかを判定する関数です。戻り値は TRUE または FALSE で、#N/Aの場合はTRUE、それ以外の値やエラー(#VALUE!、#REF!、#DIV/0!など)の場合はFALSEを返します。この関数はIF関数と組み合わせて使用することが多く、VLOOKUPやMATCHなどで検索値が見つからなかったときだけに特別な処理を行いたい場合に役立ちます。例えば、商品マスタから価格を取得するときに、該当する商品がない場合だけ「未登録」と表示し、それ以外のエラー(例えば参照先シートが削除されたなど)はそのまま表示して注意を促すことができます。ISNA関数は引数を1つだけとるシンプルな構造で、初心者でも簡単に使えますが、その用途は非常に実用的です。
ISNA関数の基本的な使い方と実践例
ここではISNA関数を使った代表的なパターンを手順付きで説明します。単独で使うケース、IFと組み合わせるケース、IFERRORとの使い分けを抑えてください。
単独で#N/Aを判定する
- セルに直接ISNAを入力する
判定したいセル(例えばB2)がある場合、別のセルに=ISNA(B2)と入力します。B2が#N/AならTRUE、それ以外ならFALSEが表示されます。単体ではあまり使いませんが、デバッグや条件付き書式の設定時に便利です。 - VLOOKUPの結果を直接判定する
VLOOKUPの結果が#N/Aかどうかを確認するには、=ISNA(VLOOKUP(A2,範囲,列,FALSE))とします。検索値が見つからなければTRUE、見つかればFALSEを返します。
IF関数と組み合わせて表示を制御する
- 基本的な構文
=IF(ISNA(数式), "代替値", 数式)という形で使います。数式が#N/Aのときだけ「代替値」を表示し、それ以外は数式の結果を表示します。例えば在庫リストで商品コードが見つからない場合に「在庫なし」と表示するには、=IF(ISNA(VLOOKUP(C2,在庫!A:B,2,FALSE)), "在庫なし", VLOOKUP(C2,在庫!A:B,2,FALSE))と書きます。 - 数式を2回書かないコツ
同じVLOOKUPを2回書くとシートが重くなります。そこで、事前にVLOOKUPの結果を別の列に出しておき、その列を参照すると効率的です。例えばD列にVLOOKUPを入れて、E列で=IF(ISNA(D2), "在庫なし", D2)とします。ただし、1つのセルで完結させたい場合は上記の二重VLOOKUPでも問題ありません。
ISERRORやIFERRORとの使い分け
ISERROR関数はすべてのエラー(#N/A、#VALUE!、#REF!、#DIV/0!、#NUM!、#NAME?、#NULL!)に対してTRUEを返します。IFERROR関数はすべてのエラーを代替値に置き換えます。一方ISNAは#N/Aだけに反応します。例えば、参照先のシート名が変わったために#REF!エラーが発生した場合、ISERRORやIFERRORはそれを捕捉して代替表示にしてしまいますが、ISNAを使えば#N/Aだけを処理し、#REF!はそのまま表示できます。これにより、想定外のエラーに気づきやすくなります。自分が制御したいエラーが#N/Aだけである場合にはISNAが最適です。
ISNA関数を使うときの注意点と制限
ISNA関数は特定のエラーだけを判定する便利な関数ですが、使用する際にいくつか注意すべき点があります。
ISNAは#N/A以外のエラーを検出しない
これはISNAの特徴ですが、#VALUE!や#REF!などのエラーを無視したいわけではない場合には注意が必要です。もし他のエラーも一緒に処理したいならISERRORやIFERRORを使うべきです。逆に、他のエラーは残しておきたいという要件にはぴったりです。
数式を2回評価するとパフォーマンスが低下する
IF(ISNA(VLOOKUP(…)), … , VLOOKUP(…)) の形ではVLOOKUPが2回実行されます。データ量が多いと計算が遅くなる原因になります。代替案として、LET関数を使ってVLOOKUPの結果を変数に格納する方法があります(GoogleスプレッドシートではLET関数が2022年から利用可能です)。
例: =LET(result, VLOOKUP(A2,範囲,2,FALSE), IF(ISNA(result), "該当なし", result))
これによりVLOOKUPの実行は1回だけになります。
IFNA関数という代替手段がある
GoogleスプレッドシートにはIFNA関数という専用関数が用意されています。IFNA(数式, 代替値) は数式が#N/Aの場合だけ代替値を返し、それ以外のエラーはそのまま表示します。つまりISNAとIFの組み合わせを1つの関数にしたものです。IFNAのほうが構文がシンプルで、二重評価の問題も発生しません。ただしISNAはIF以外にもSUMIFや条件付き書式など、さまざまな場面で使える汎用性があります。
ADVERTISEMENT
ISNA関数と他のエラー判定関数の比較
| 関数名 | 判定するエラー | 戻り値(エラーの場合) | 使用例 |
|---|---|---|---|
| ISNA | #N/Aのみ | TRUE | =IF(ISNA(A1),”なし”,A1) |
| ISERROR | すべてのエラー | TRUE | =IF(ISERROR(A1),”エラー”,A1) |
| IFERROR | すべてのエラー | 代替値 | =IFERROR(A1,”エラー”) |
| IFNA | #N/Aのみ | 代替値 | =IFNA(A1,”該当なし”) |
まとめ
ISNA関数は#N/Aエラーだけを正確に判定できる便利な関数です。VLOOKUPやMATCHの結果に使うことで、見つからない場合だけ特別な処理を行い、他のエラーはそのまま表示できます。IF関数との組み合わせで柔軟な制御が可能ですが、同じ数式を2回書くとパフォーマンスが下がるため、LET関数やIFNA関数の利用も検討しましょう。ISNAを理解すれば、エラー処理の幅が広がります。次はIFNA関数やIFERROR関数との違いを実際に試してみると、より理解が深まります。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】数値の連続データを自動入力!オートフィルの活用
- 【Googleスプレッドシート】ダークモードを有効にする!目に優しい配色への切替
- 【Googleスプレッドシート】株価APIで株式データを自動取得!GOOGLEFINANCE超え活用
- 【Googleスプレッドシート】共有相手が編集できない時のチェック!権限と許可状態の確認
- 【Googleスプレッドシート】ページ設定で用紙サイズと向きを調整!印刷レイアウトの基本
- 【Googleスプレッドシート】Excelファイルxlsxをインポートする手順!ドラッグ&ドロップで取り込み
- 【Googleスプレッドシート】条件付き書式をコピーする!書式のみペーストの活用
