概要
「マスタに存在しないコードだけを見つけたい」
「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(…))) ' 未一致だけ抽出
マスタ突合・新規コードの洗い出し・データチェックなど、
現場での「抜けモレ探し」の定番パターンとして、ぜひ使いこなしてみてください。
