Excel関数 逆引き集 | MATCH失敗対策 → IFNA

Excel
スポンサーリンク

概要

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 で包んで「見つからないのは想定内、それ以外は気づく」
という状態に整えてみてください。

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