Excel関数 逆引き集 | 未一致データ抽出 → ISNA

Excel VBA Excel
スポンサーリンク

概要

「マスタに存在しないコードだけを見つけたい」
「A表にはあるけどB表にはないデータを洗い出したい」

こういう“未一致データ(マスタにないデータ)”を抽出するときに使えるのが
ISNA(アイエスエヌエー)関数です。

多くの場合、
VLOOKUP や XLOOKUP で検索 → 見つからないと #N/A → それを ISNA で判定
という流れで使います。


ISNA の基本

ISNA とは

#N/A エラーかどうかを判定して、
#N/A なら TRUE、それ以外なら FALSE を返す関数です。

=ISNA(値または式)

値または式 のところに VLOOKUP や XLOOKUP などの“検索式”を入れて、
「見つからなかった行(= #N/A)」を判定するのが定番パターンです。


VLOOKUP と組み合わせて「未一致行」をマークする

基本パターン

A表のコードが、マスタ(B表)に存在するかチェックする例で説明します。

Sheet「A表」
A列:商品コード

Sheet「マスタ」
A列:商品コード
B列:商品名

A表の B2 に、
「A2 のコードがマスタに“ない”なら TRUE、“ある”なら FALSE」を出したいとき:

=ISNA(VLOOKUP(A2, マスタ!$A$2:$B$100, 2, FALSE))

VLOOKUP の結果が #N/A(=マスタに存在しない)なら TRUE、
見つかれば FALSE になります。

これだけでも「未一致行」が一目で分かりますが、
実務では TRUE/FALSE をそのまま見せるより、
IF と組み合わせるのが使いやすいです。

「未登録」「OK」といった文字に変える

=IF(ISNA(VLOOKUP(A2, マスタ!$A$2:$B$100, 2, FALSE)),
    "未登録",
    "OK")

マスタにないコード → 「未登録」
マスタにあるコード → 「OK」

と表示されます。


FILTER と組み合わせて「未一致データだけ」を抽出

A表にだけ存在するコード一覧を抽出する

A表にあるコードのうち、
「マスタに存在しないコードだけ」を一覧で取り出したい場合:

Sheet「A表」:A2:A100 に商品コード
Sheet「マスタ」:A2:A100 に商品コード

別の場所(例:D2)に、次の式を書きます。

=FILTER(A表!A2:A100,
        ISNA(VLOOKUP(A表!A2:A100, マスタ!$A$2:$A$100, 1, FALSE)))

意味をかみ砕くと、

  • VLOOKUP(A表!A2:A100, マスタ!$A$2:$A$100, 1, FALSE)
    A表のコードがマスタにあるか検索
  • 見つからないものは #N/A
  • ISNA(...)#N/A だけ TRUE にする
  • TRUE の行だけ FILTER で抽出

これで「A表にはあるがマスタにないコード」だけが一覧で出てきます。
突合チェックやマスタ未登録の洗い出しでよく使う形です。


XLOOKUP の場合も考え方は同じ

XLOOKUP も、見つからないときに #N/A を返します(第4引数を省略した場合)。

ISNA × XLOOKUP の例

=ISNA(XLOOKUP(A2, マスタ!$A$2:$A$100, マスタ!$B$2:$B$100))

TRUE → マスタに存在しない
FALSE → マスタに存在する

と判定できます。

FILTER と組み合わせれば、VLOOKUP のときと同じ要領で
「未一致だけ抽出」が可能です。


ISNA と IFERROR の違いと使い分け

ISNA

#N/A かどうかだけを判定します。
「検索して見つからない」という状況をピンポイントで扱いたいとき向きです。

IFERROR

#N/A だけでなく、0割りなど他のエラーも全部まとめて扱います。

=IFERROR(VLOOKUP(...),"エラー")

のように使うと便利ですが、
「未一致だけを抽出したい」「#N/A だけを判定したい」場面では、
ISNA のほうが意味がはっきりしていて安全です。


例題

問題1: Sheet「A表」の A2:A100 に商品コード、Sheet「マスタ」の A2:B100 に商品マスタ(A列=コード, B列=商品名)が入っています。A2 のコードがマスタに存在しない場合に TRUE を返す式を、A表の B2 に書いてください。

=ISNA(VLOOKUP(A2, マスタ!$A$2:$B$100, 2, FALSE))

問題2: 問題1の設定で、B2 に「未登録」または「OK」と表示されるように式を書いてください(未一致なら未登録、一致すればOK)。

=IF(ISNA(VLOOKUP(A2, マスタ!$A$2:$B$100, 2, FALSE)),
    "未登録",
    "OK")

問題3: A表のコードのうち、「マスタに存在しないコードだけ」を D2 に一覧で抽出する式を書いてください(FILTER を使用)。

=FILTER(A表!A2:A100,
        ISNA(VLOOKUP(A表!A2:A100, マスタ!$A$2:$A$100, 1, FALSE)))

問題4: A2 に顧客ID があり、マスタシートの A2:A100 に顧客ID、B2:B100 に顧客名が入っています。A2 の顧客ID がマスタに存在しないときだけ「未登録」と表示し、存在する場合は顧客名を表示する式を C2 に書いてください。

=IF(ISNA(VLOOKUP(A2, マスタ!$A$2:$B$100, 2, FALSE)),
    "未登録",
    VLOOKUP(A2, マスタ!$A$2:$B$100, 2, FALSE))

問題5: XLOOKUP を使用し、A2 の商品コードがマスタに存在しない場合に TRUE を返す式を B2 に書いてください。

=ISNA(XLOOKUP(A2, マスタ!$A$2:$A$100, マスタ!$B$2:$B$100))

まとめ

ISNA は、

  • #N/A(見つからない)を TRUE として判定する関数
  • VLOOKUP / XLOOKUP と組み合わせて「未一致」をマークしたり抽出したりできる
  • FILTER と組み合わせると「未一致データだけの一覧」を簡単に作れる

という、“未一致専用のエラー判定ツール”です。

特に次の2パターンは、そのままテンプレとして使えます。

=ISNA(VLOOKUP(…))           ' 未一致かどうか判定
=FILTER(範囲, ISNA(VLOOKUP(…)))  ' 未一致だけ抽出

マスタ突合・新規コードの洗い出し・データチェックなど、
現場での「抜けモレ探し」の定番パターンとして、ぜひ使いこなしてみてください。

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