ExcelでVLOOKUPを使っていて、「え、この値ぜったい合ってるのに #N/A エラーが出る…!」と頭を抱えたこと、ありませんか?
実はこれ、Excel作業でめちゃくちゃあるあるなトラブルなんです。見た目はまったく同じに見えるのに、Excelの中では「別モノ」として扱われている――そんな"目に見えない原因"が潜んでいることがほとんど。
この記事では、2026年3月時点の情報をもとに、VLOOKUPやXLOOKUPで値が一致しない5つの原因と、それぞれの具体的な対処法をわかりやすく解説します。「もう何時間も悩んでる…」という人は、上から順番に試してみてください。
原因1:セルの前後に「見えないスペース」が紛れている
これが一番多い原因です。ほかのシステムやWebページからコピペしたデータには、セルの先頭や末尾に半角スペースが混入していることがよくあります。
見た目では「東京都」と「東京都 」(末尾にスペース)の区別がつきません。でもExcelは律儀に「これは違う文字列だよ」と判断します。
確認方法:LEN関数を使いましょう。たとえば =LEN(A2) と入力して、検索元と検索先のセルの文字数を比べてみてください。文字数が違っていたら、どちらかに余計な文字が入っています。
対処法:TRIM関数を使って前後のスペースを除去します。
=VLOOKUP(TRIM(A2), B:D, 3, FALSE)
ざっくり言うと、TRIM関数は「セルの前後にくっついた余計なスペースを全部消してくれる関数」です。VLOOKUPの第1引数(検索値)をTRIMで囲むだけでOK。
原因2:改行コードや制御文字が隠れている
セルの中に改行コード(Alt+Enterで入る改行)や、目には見えない制御文字が混ざっていることがあります。特にCSVファイルや業務システムからエクスポートしたデータに多いパターンです。
改行コードはExcelでは CHAR(10)(LF)や CHAR(13)(CR)として存在していて、TRIMだけでは消えません。
対処法:CLEAN関数を使います。CLEAN関数は「印刷できない制御文字」をまとめて除去してくれます。
=VLOOKUP(TRIM(CLEAN(A2)), B:D, 3, FALSE)
TRIMとCLEANの合わせ技が基本です。まずCLEANで制御文字を消して、TRIMでスペースを消すという順番で覚えておきましょう。
原因3:Webコピペの「ノーブレークスペース」が犯人
Webページからデータをコピー&ペーストしたとき、通常の半角スペースではなくノーブレークスペース(CHAR(160))という特殊な空白文字が混入することがあります。
やっかいなことに、この文字はTRIMでもCLEANでも消えません。見た目は普通のスペースとまったく同じなので、「TRIMしたのにまだ一致しない!」という場合はこれを疑ってください。
対処法:SUBSTITUTE関数で CHAR(160) を通常のスペースに置き換えてからTRIMします。
=TRIM(CLEAN(SUBSTITUTE(A2, CHAR(160), " ")))
これが万能クリーニング式です。ノーブレークスペース → 通常スペースに変換 → 制御文字を除去 → 前後のスペースを除去、という3段階でほぼすべての「見えない文字」に対応できます。
さらに全角スペースも消したい場合は、こう書きます:
=TRIM(CLEAN(SUBSTITUTE(SUBSTITUTE(A2, CHAR(160), " "), " ", " ")))
原因4:数値と文字列の「型」が違う
見た目は同じ「12345」なのに、片方は数値、もう片方は文字列として保存されている――これもVLOOKUPが一致しない定番の原因です。
Excelでは、セルの左寄せ(文字列)と右寄せ(数値)で見分けがつきます。また、セルの左上に緑の三角マーク(エラーインジケーター)が出ていたら、「数値が文字列として保存されていますよ」というサインです。
確認方法:=ISTEXT(A2) や =ISNUMBER(A2) で型を確認できます。検索値と検索先で結果が違っていたら、型の不一致が原因です。
対処法(文字列→数値に変換):
=VLOOKUP(VALUE(A2), B:D, 3, FALSE)
VALUE関数は文字列として保存された数字を、数値に変換してくれます。逆に数値側を文字列に合わせたい場合は =TEXT(A2, "0") を使いましょう。
一括で直す方法:文字列として保存されたセルを選択 → 緑の三角マークをクリック → 「数値に変換」を選ぶだけでもOKです。Microsoft公式ヘルプにも手順が載っています。
原因5:VLOOKUPの第4引数を省略している(近似一致になっている)
意外と見落としがちなのがこれ。VLOOKUPの第4引数(検索の型)を省略すると、デフォルトでTRUE(近似一致)になります。
完全一致で検索したいなら、必ず FALSE を指定してください。
× =VLOOKUP(A2, B:D, 3) ← 近似一致(予期しない結果になりがち)
○ =VLOOKUP(A2, B:D, 3, FALSE) ← 完全一致(こちらが安全)
近似一致モードでは、検索範囲が昇順に並んでいないと正しい結果を返しません。「なぜか違う値が返ってくる」「#N/Aではないけど結果がおかしい」という場合は、まずここを確認しましょう。
ちなみに、XLOOKUP関数(Microsoft 365 / Excel 2021以降で使用可能)は、デフォルトが完全一致なので、この問題が起きません。今後はXLOOKUPへの移行もおすすめです。Microsoft公式のXLOOKUP解説も参考にしてください。
まとめ:困ったときの「万能クリーニング式」
ここまで5つの原因を紹介しましたが、正直「どれが原因かわからない…」ということも多いですよね。そんなときは、以下の万能クリーニング式をVLOOKUPの検索値に使ってみてください。
=VLOOKUP(TRIM(CLEAN(SUBSTITUTE(SUBSTITUTE(A2, CHAR(160), " "), " ", " "))), B:D, 3, FALSE)
この1行で、スペース・制御文字・ノーブレークスペース・全角スペースをすべて処理できます。それでもダメなら「原因4」の型の不一致を疑って、VALUE関数やISTEXT関数で確認してみましょう。
なお、検索先(VLOOKUP の第2引数で指定した範囲)の方にも同じ問題があることが多いです。検索値だけ TRIM しても解決しない場合は、検索先データのほうも別の列でクリーニングしてから参照するのが確実です。
FAQ
VLOOKUPで #N/A が出るのは必ず「見えない文字」が原因?
いいえ。検索値がそもそも検索範囲に存在しない場合や、検索範囲の指定が間違っている場合も #N/A になります。まずは検索範囲の最初の列に検索したい値が本当にあるか確認しましょう。見えない文字が原因かどうかは、LEN関数で文字数を比較すると判別できます。
TRIM関数とCLEAN関数はどう使い分ける?
TRIM関数は「余計なスペース」を消す関数、CLEAN関数は「印刷できない制御文字(改行など)」を消す関数です。どちらか迷ったら =TRIM(CLEAN(セル)) のように両方セットで使うのが安全です。
XLOOKUPに乗り換えたほうがいい?
Microsoft 365またはExcel 2021以降を使っているなら、XLOOKUPをおすすめします。デフォルトで完全一致、検索列が左端でなくてもOK、エラー時の戻り値も関数内で指定できるなど、VLOOKUPより使いやすいです。ただし、Excel 2016/2019ユーザーとファイルを共有する場合は互換性に注意してください。
CSVファイルを開いたら数値が文字列になっていた。まとめて直す方法は?
対象のセル範囲を選択し、左上に出る緑の三角マーク(エラーインジケーター)→「数値に変換」を選ぶのが最も手軽です。大量のデータなら、空いたセルに「1」と入力してコピーし、対象範囲を選んで「形式を選択して貼り付け」→「乗算」を選ぶと一括変換できます。
CHAR(160)って何?普通のスペースと何が違う?
CHAR(160)は「ノーブレークスペース」と呼ばれる特殊な空白文字です。HTMLでは として使われており、Webページからのコピー時に混入します。通常のスペース(CHAR(32))とは文字コードが違うため、ExcelのTRIM関数では除去できません。SUBSTITUTE関数で置換する必要があります。






