概要
MATCH を使っていると、
「見つからないときの #N/A が邪魔」「でも、他の本当のエラーは気づきたい」
という場面がよく出てきます。
そこで役立つのが IFNA 関数で MATCH の“失敗だけ”をやわらかく扱うテクニック です。
IFERROR と違って、#N/A だけを捕まえる ので、「本当におかしいエラー」は隠しません。
ここでは、MATCH 失敗対策にしぼって IFNA の使い方を解説します。
MATCH の基本と「失敗時 #N/A」
MATCH の基本形と動き
MATCH の代表的な形はこうです。
=MATCH(検索値, 検索範囲, 0)
検索値
探したい値(商品コード・社員番号など)
検索範囲
探しに行く範囲(リストや一覧)
0
「完全一致で探す」という指定
動きはシンプルで、
見つかったとき
範囲の中での“位置”(1,2,3,…)を返す
見つからなかったとき#N/A エラーを返す
この「見つからなかったときの #N/A」だけを
きれいなメッセージや 0 に置き換えるのが IFNA の役割です。
IFNA の基本(#N/A 専用のエラー処理)
IFNA の書式と特徴
=IFNA(値, #N/Aのときに返す値)
動きはこうです。
値が #N/A のとき
第2引数「#N/Aのときに返す値」を返す
値が #N/A 以外(正常な値 or 他のエラー)のとき
そのままの結果を返す
つまり、
「見つからない(#N/A)のは想定内だから優しく扱う。
それ以外のエラーは“異常”なので、そのまま表示して気づけるようにする」
という設計になっています。
MATCH の「見つからない」対策には、IFERROR より IFNA が相性抜群です。
MATCH+IFNA の基本パターン
見つからないときに「該当なし」と表示
A2:検索値
D2:D10:検索範囲(リスト)
元の MATCH はこうです。
=MATCH(A2, $D$2:$D$10, 0)
見つからないと #N/A になります。
これを IFNA で包んで「該当なし」と表示するようにします。
=IFNA(
MATCH(A2, $D$2:$D$10, 0),
"該当なし"
)
動きはこうです。
見つかったとき
MATCH の結果(位置)をそのまま返す
見つからないとき(#N/A)
「該当なし」と表示
MATCH の構文ミスなどで #VALUE! など別エラーが出た場合
そのままエラーとして表示(気づける)
見つからないときに 0 や空白を返す
位置がないときは 0 にする
「位置が見つからないときは 0」として扱いたい場合。
=IFNA(
MATCH(A2, $D$2:$D$10, 0),
0
)
これで、
見つかったとき
1,2,3,… といった位置が返る
見つからないとき
0 が返る
後続の計算式では、
=IF(位置セル=0, "なし", "あり")
のように判定しやすくなります。
画面上は何も表示したくない(空白)
=IFNA(
MATCH(A2, $D$2:$D$10, 0),
""
)
#N/A を空白にできるので、表がエラーだらけになるのを防げます。
MATCH の結果を INDEX で使うときの失敗対策
INDEX+MATCH の「セット」で IFNA をかけるパターン
よくある組み合わせがこれです。
=INDEX($E$2:$E$10, MATCH(A2, $D$2:$D$10, 0))
A2 を D列で探し、その位置で E列から値を持ってくる形ですね。
この MATCH が見つからず #N/A になると、
INDEX 全体もエラーになります。
そこで、式全体を IFNA で包みます。
=IFNA(
INDEX($E$2:$E$10, MATCH(A2, $D$2:$D$10, 0)),
"該当なし"
)
動きはこうです。
一致が見つかったとき
INDEX の結果(対応する値)を返す
一致が見つからず MATCH が #N/A のとき
「該当なし」と表示
INDEX や MATCH の構造そのものがミスっているとき
別エラーのまま表示(気づける)
「見つからない」という正常なケースだけ、
やさしくハンドリングしたいときにちょうどいい形です。
IFERROR ではなく IFNA を使う意味
「全部のエラーを隠さない」ための IFNA
IFERROR は、
=IFERROR(値, エラーのときの値)
で、#N/A だけでなく#DIV/0!, #VALUE!, #REF! など すべてのエラー をまとめて処理します。
MATCH 失敗対策だけなら、IFERROR でも動きますが、
- 範囲指定ミス
- 関数の引数ミス
- 想定外の不具合
といった「本当は気づきたいエラー」まで
きれいに隠してしまうリスクがあります。
「見つからない(#N/A)だけは想定内、それ以外のエラーは気づきたい」
という MATCH の典型的な使い方では、
IFERROR より IFNA を選ぶ 方が安全です。
例題
問題1
A2 の値を、D2:D10 の範囲から MATCH で検索しています。MATCH(A2, $D$2:$D$10, 0) の結果が #N/A(見つからない)のとき、
「該当なし」と表示する式を IFNA を使って書いてください。
=IFNA(
MATCH(A2, $D$2:$D$10, 0),
"該当なし"
)
問題2
A2 の値を D2:D10 から MATCH で探し、
見つかったときは位置(1〜)を返し、見つからないときは 0 を返したいです。
IFNA を使った式を書いてください。
=IFNA(
MATCH(A2, $D$2:$D$10, 0),
0
)
問題3
MATCH の結果を INDEX で使っています。
=INDEX($E$2:$E$10, MATCH(A2, $D$2:$D$10, 0))
一致が見つからず MATCH が #N/A になったとき、
「該当なし」と表示するように、IFNA で式全体を包んで書き直してください。
=IFNA(
INDEX($E$2:$E$10, MATCH(A2, $D$2:$D$10, 0)),
"該当なし"
)
問題4
A2 の値を D2:D10 から探しています。MATCH(A2, $D$2:$D$10, 0) の結果が #N/A のときだけ空白(””)を返し、
それ以外は MATCH の戻り値(位置)を返す式を書いてください。
=IFNA(
MATCH(A2, $D$2:$D$10, 0),
""
)
問題5
A2 の値を D2:D10 から MATCH し、
「見つかれば『あり』、見つからなければ『なし』」と表示したいです。
IFNA と MATCH を組み合わせた式を書いてください。
=IFNA(
MATCH(A2, $D$2:$D$10, 0),
"なし"
)
上式では、見つかったときは位置が返りますが、
表示を完全に「あり/なし」にしたい場合は、例えば次のように一段階挟みます。
=IF(ISNUMBER(IFNA(MATCH(A2, $D$2:$D$10, 0), "")), "あり", "なし")
まとめ
「MATCH 失敗対策 → IFNA」のポイントは、次のひと言に尽きます。
#N/A(見つからない)だけを、きれいな既定値に置き換える
型はこれだけ覚えておけば十分です。
=IFNA(MATCH(検索値, 検索範囲, 0), 見つからないときに返す値)
あるいは、INDEX と組み合わせるなら、
=IFNA(INDEX(戻り範囲, MATCH(検索値, 検索範囲, 0)), 見つからないときに返す値)
MATCH の結果に #N/A が出ているところがあれば、
まずは IFNA で包んで「見つからないのは想定内、それ以外は気づく」
という状態に整えてみてください。
