検索関数を使っていると、検索対象が見つからずに#N/Aエラーが表示されることがあります。今回は、この#N/Aエラーだけをピンポイントで処理できるIFNA関数について、使い方としくみを解説します。
IFNA関数とは
ある式の結果が「#N/Aエラー」だったときだけ、代わりの値を返す関数です。似た働きをする関数にIFERRORがありますが、IFERRORがどんな種類のエラーにも反応するのに対し、IFNAは#N/Aエラーだけに反応する、という違いがあります。
基本の書式はこうです。
=IFNA(値, エラーの場合の値)
「値」の部分には、VLOOKUPなど#N/Aエラーを返す可能性がある式をそのまま指定します。
成績管理表での実例:VLOOKUP失敗時に「未登録」と表示する
大阪グーニーズの成績管理表には、選手名・背番号・守備位置をまとめた「選手マスタ」シートがあります。個人成績シートでは、A列に入力された選手名をもとに、VLOOKUPで背番号を参照しています。
| 選手名 | 背番号 | 守備位置 |
|---|---|---|
| SUZUKI | 7 | 中堅手 |
| NAKATA | 3 | 一塁手 |
| YAMAMOTO | 5 | 左翼手 |
個人成績シートのB2セルに、A2セルの選手名から背番号を取得する式を入れると、こうなります。
=VLOOKUP(A2, 選手マスタ!A:C, 2, FALSE)
ここで、助っ人参加などによりA2セルに選手マスタ未登録の選手名(例:TANAKA)が入力されると、この式は#N/Aエラーを返してしまいます。IFNAと組み合わせると、次のようにできます。
=IFNA(VLOOKUP(A2, 選手マスタ!A:C, 2, FALSE), "未登録")
これで、選手マスタにいない選手名が入力された場合は、エラー表示の代わりに「未登録」という文字列がB2セルに表示されるようになります。
IFNAをつけない状態で、正しく背番号が引けているかをまず確認しておきます。
式の先頭に「=IFNA(」を追加し、その後ろに元のVLOOKUP式をそのまま続けます。
「”未登録”」のように、#N/Aだったときに表示したい文字列を入れて「)」で閉じ、Enterキーで確定します。
しくみを理解する:IFNAとIFERRORの違い
IFNAは、指定した式の計算結果を確認し、それが#N/Aエラーであるときだけ2つ目の引数の値に置き換えます。#N/A以外のエラー(#REF!、#DIV/0!、#VALUE!など)が発生した場合は、IFNAは何もせず、そのままエラーを表示させます。
一方でIFERRORは、エラーの種類を区別せず、どんなエラーでも一律に代替値へ置き換えます。この違いがあるため、IFNAを使うと「検索対象が単に見つからないだけ」なのか「式そのものに別の不具合がある」のかを見分けやすくなります。
よくあるミス
VLOOKUPの列指定を間違えていて#REF!が出ているようなケースでも、IFERRORを使っていると一律「未登録」と表示されてしまいます。選手マスタ側の不備なのか、式そのものの間違いなのかが分かりにくくなるため、原因を切り分けたい場面ではIFNAのほうが有利です。
IFNAは#N/A以外のエラーをそのまま素通りさせる仕様です。列番号のズレなど別の原因で#REF!が出ている場合、「未登録」は表示されずエラーのまま残ります。「IFNAを使ったのに未登録と表示されない」というときは、#N/A以外のエラーが起きていないか式を見直してみてください。
- IFNA関数は「指定した式が#N/Aエラーのときだけ」代替値を返す関数
- IFERRORとの違いは、エラーの種類を区別するかどうか(IFNAは#N/A限定、IFERRORは全種類)
- VLOOKUPなどの検索関数と組み合わせ、「未登録」の表示専用として使うと原因の切り分けがしやすくなる
次回予告
次回のテーマは「ネスト(関数の入れ子)の考え方」です。関数を重ねるときの評価順序や可読性の注意点を、IF×IFERRORを組み合わせた打率表示式を例に解説していきます。
▶︎ 次回:関数のネスト(入れ子)の考え方としくみ



コメント