商品コードや社員番号で別の表から名前を引いてくる VLOOKUP。式は合っているはずなのに「#N/A」が出て止まってしまう、という相談はとても多いです。
原因の多くは式ではなく「データの見た目では分からない違い」です。今日は、まず見てほしい3つの場所と、その直し方をまとめます。
例として、次のような表を使います。
(表の例)
A001 りんご
A002 みかん
1003 ぶどう
A004 もも
探す式はこれです(D2 に探したいコード)。
=VLOOKUP(D2,$A$2:$B$5,2,FALSE)
■1. 見えない空白が付いていないか
「A001」と「A001 」(後ろに空白)は、画面ではほぼ同じに見えますが、VLOOKUP は別の文字として扱います。コピー&ペーストで持ってきたデータによく混じります。
確かめ方は LEN 関数です。=LEN(A5) が、見えている文字数より多ければ空白が混じっています。
直し方は、探す側なら TRIM で空白を取ってから探します。
=VLOOKUP(TRIM(D2),$A$2:$B$5,2,FALSE)
表の側に空白が付いているときは、表の横に =TRIM(A2) の列を作り、その列を探す範囲にします。元データを直せるなら、それがいちばん確実です。
■2. 数字が「数値」と「文字」で混ざっていないか
「1003」が表では文字として、探す側では数値として入っていると、同じ 1003 でも一致しません。左寄せ・右寄せが違っていたら、この可能性が高いです。
探す側を文字にそろえるには、後ろに &"" を付けます。
=VLOOKUP(D2&"",$A$2:$B$5,2,FALSE)
空白と両方が心配なときは TRIM(D2&"") とまとめても大丈夫です。
■3. 最後の「FALSE」を省いていないか
4つ目の引数を省くと「だいたい合っているもの」を探す動き(近似一致)になります。表がコード順に並んでいないと、エラーではなく別の行の値が返ることがあります。#N/A よりも気づきにくいので、コードで探すときは必ず FALSE を付けてください。
■見つからないときの表示を整える
本当に表に無いコードもあります。そのときに #N/A のままだと集計が止まるので、IFERROR で文字に置きかえておくと扱いやすくなります。
=IFERROR(VLOOKUP(TRIM(D2&""),$A$2:$B$5,2,FALSE),"見つからない")
ただし、これを最初から付けると、上の1〜2の原因まで「見つからない」で隠れてしまいます。まず1〜3を確かめてから、最後に付けるのがおすすめです。
■まとめ
- 見えない空白 → LEN で確かめて TRIM
- 数値と文字の混在 → &"" でそろえる
- 4つ目の引数 → コードで探すなら必ず FALSE
上の式は、手元で見本の表を作り、計算ツール(Excel 形式で計算するもの)で結果を確かめています。Google スプレッドシートでも同じ書き方で使えますが、そちらの画面では確かめていません。
――――
「自分の表だとどう直せばいいか分からない」という方向けに、スプレッドシートの関数や GAS を1つお作りするサービスを出しています。動かして確かめてからお渡しします。
※この記事は生成AI(Claude)を使って書き、式は手元で計算して確かめました。