
この記事では、VLOOKUPで#N/Aなのに値が存在する原因を特定し、「区切り位置」「VALUE関数」「””(空文字連結)」を使った解決方法まで解説します。
VLOOKUPで検索すると#N/A。でもマスタを見ると、確かに値はある。式も間違っていない。「Excel壊れた?」――そんなときは落ち着いてください。この症状、かなりの確率で「文字列の123」と「数値の123」がぶつかっているだけです。
実際にはVLOOKUPの故障ではなく、Excelが「123(数値)」と「123(文字列)」を別のデータとして扱っていることが原因です。

急いでいる人向け:まずこれを試す
原因の理屈より先に直したい人は、これだけ試してください。特にCSV取り込みデータでは、この操作だけで解決するケースが少なくありません。
- 検索値の列、またはマスタの検索列を1列だけ選択する。
- [データ]タブ → [区切り位置]をクリック。
- ウィザードが開いたら、何も変えずに[次へ]→[次へ]→[完了]。
これで直れば解決です。直らなければ、検索値とマスタの両方に同じ操作をしてみてください。それでもダメなら、この先の原因別の対処を読み進めてください。
(※区切り位置は1列ずつしか実行できません。複数列または行方向をまとめて選ぶとエラーになります。)
まず確認:あなたの症状はこれ?(30秒)
次のうち、2つ以上当てはまれば、このページの原因(数値と文字列の不一致)である可能性が高いです。
- VLOOKUPの結果が#N/Aになる
- でもマスタには、その値が確かに存在している
- そのデータはCSV取り込み・基幹システム出力・Webからのコピペのいずれかで用意した
なぜ起きる?「123」と「123」が別物になる仕組み
Excelでは、同じ「123」でも内部的に数値の123と文字列の”123″という、まったく別のものとして扱われることがあります。見た目はそっくりですが、VLOOKUPは厳密に一致を判定するため、この2つを「別の値」とみなします。結果、マスタに数値の123しかなければ、文字列の”123″で検索しても「見つからない=#N/A」となるわけです。
典型的なのは、検索値が文字列・マスタが数値(またはその逆)になっているパターン。どちらが文字列でどちらが数値なのかを最初に見極めるのが、解決への近道です。
VLOOKUPで#N/Aの原因が文字列か数値か確認する方法(TYPE関数)
一番確実なのは、関数でデータ型そのものを調べることです。別のセルに =TYPE(A1) と入力すると、次の値が返ります。
| 結果 | 意味 |
|---|---|
| 1 | 数値 |
| 2 | 文字列 |
検索値とマスタを一度に比べたいときは、次のように並べると原因発見が早くなります。
=TYPE(A1)&"/"&TYPE(B1) → 結果が 1/1 や 2/2 なら一致、2/1 や 1/2 なら形式の食い違いです。
例えば、検索値が TYPE=2(文字列)、マスタ側が TYPE=1(数値)なら、見た目が同じ「123」でも一致しません。
VLOOKUPで「値があるのに#N/A」の場合、まずこのTYPE関数で検索値とマスタの型が一致しているか確認してください。原因特定の近道です。
(=ISTEXT(A1)/=ISNUMBER(A1) で TRUE/FALSE を見る方法でも構いません。)
パッと見でも分かるサイン
| サイン | 文字列のとき | 数値のとき |
|---|---|---|
| セル内の配置 | 左寄せになりやすい | 右寄せになりやすい |
| セル左上の緑の三角 | 「数値が文字列として保存されています」と出ることがある | 出ない |
| 先頭のアポストロフィ | '123 のように ' が付くことがある | 付かない |
直す前に決める:元データを変えていいか?
解決法は大きく2系統あります。ここを最初に決めると迷いません。
| 解決法A:元データの形式を統一する | 解決法B:数式の中で形式を揃える | |
|---|---|---|
| 向いている場面 | 元のセルを直接書き換えてOKなとき | 元データを残したい/触れない(共有ブック等)とき |
| やること | 「区切り位置」やエラーチェックで形式を変換 | VLOOKUPの中で VALUE や &"" で変換 |
| メリット | 一度直せば以降の式もすべて軽くなる | 元データを汚さず、再取り込みにも強い |
| 注意点 | 毎回CSVを落とす運用だと毎回直す必要あり | 数式が少し長くなる/先頭ゼロに注意 |
解決法A:元データの形式を統一する
検索値・検索範囲の両方を同じ形式(「G/標準」または「文字列」)に揃えます。片方だけでは一致しません。
方法A-1:まずは「区切り位置」を試す(最も解決率が高い)

- 形式を揃えたい列を1列だけ選択する。
- [データ]タブ → [区切り位置]をクリック。
- ウィザードが開いたら、何も変えずに[次へ]→[次へ]と進む。
- [列のデータ形式]で「G/標準」または「文字列」を選び、[完了]をクリック。
期待される結果:左寄せだった数字が右寄せ(数値)に変わる、または逆に文字列に統一される。これを検索値の列とマスタの検索列の両方に行います。

方法A-2:緑の三角から「数値に変換する」
「数値が文字列として保存されています」の緑の三角が出ているときは、これが最速です。
- 対象セルをまとめて選択する。
- 左上に出る[!]アイコンをクリック。
- 「数値に変換する」を選ぶ。
期待される結果:文字列の数字が一括で数値に変わる。ただしこの方法は「文字列→数値」専用で、逆方向には使えません。
解決法B:数式の中で形式を揃える(元データを触らずに)
元データを書き換えたくない・できない場合は、VLOOKUPの式の中で形式を吸収します。どちらの形式に合わせるかで書き方が変わります。
方法B-1:検索値を「数値」に変換する(マスタが数値のとき)
検索値が文字列、マスタが数値のときは VALUE で数値に変換します。
=VLOOKUP(VALUE(C1), A1:B10, 2, FALSE)
短く書くなら C1*1 や C1+0、--C1 でも同じです。
=VLOOKUP(C1*1, A1:B10, 2, FALSE)
方法B-2:検索値を「文字列」に変換する(マスタが文字列のとき)
マスタが文字列、検索値が数値のときは、検索値を文字列に変換します。一番手軽で確実なのは、末尾に空文字を連結する &"" です。
=VLOOKUP(C1&"", A1:B10, 2, FALSE)
桁を固定して揃えたいとき(例:4桁コード)だけ、TEXT 関数で桁数を指定します。単に文字列化したいだけなら &"" で十分です。
=VLOOKUP(TEXT(C1,"0000"), A1:B10, 2, FALSE)
空白や制御文字もまとめて除去する
後述の「空白」対策も同時に効かせるなら、こう書けます。
=VLOOKUP(TRIM(CLEAN(C1))&"", A1:B10, 2, FALSE)
※TRIMやCLEANは検索値側だけでなく、マスタ側に空白や制御文字が入っている場合もあります。検索値を掃除してもヒットしないときは、マスタ側も確認してください。
よくある落とし穴と対処
落とし穴1:先頭ゼロのコードは「数値に変換」すると壊れる
001234 や 0567 のように先頭にゼロが付くコードは要注意です。数値に変換すると先頭ゼロが消えて 1234 になり、かえって一致しなくなります。社員番号・商品コード・郵便番号はこのパターンが多いです。
このタイプは、数値ではなく「文字列」に揃えるのが正解です。解決法B-2の &"" や TEXT(C1,"0000") を使い、検索値もマスタも文字列で統一してください。「とりあえず数値に変換」はコードデータでは禁じ手です。
落とし穴2:VALUEが効かない(英字や記号が混ざっている)
VALUE は「数字だけの文字列」を数値に変換する関数です。A-123 のように英字や記号が混ざった値に使うと #VALUE! エラーになります。コードに英字が含まれる場合は、数値化せず、両方を文字列のまま揃えてください。
落とし穴3:形式は合っているのに直らない → 空白・全角半角を疑う
形式を揃えても一致しないときは、目に見えない余分な空白や全角・半角の違いが原因のことがあります。
- 空白を除去 →
TRIM関数:=VLOOKUP(TRIM(C1), A1:B10, 2, FALSE) - 全角を半角に →
ASC関数(逆はJIS関数) - 印刷されない制御文字を除去 →
CLEAN関数
落とし穴4:XLOOKUPに変えても、この問題は起きる
「新しいXLOOKUPなら?」と思われがちですが、結論から言うとXLOOKUPでも同じく一致しません。たとえば次の式でも、検索値が文字列の「123」・検索列が数値の123なら見つかりません。
=XLOOKUP(A1, D:D, E:E)
XLOOKUPは便利ですが、数値と文字列の違いまでは自動補正してくれないのです。とはいえ安心してください。XLOOKUPでこのエラーが出たときも、対処はこの記事と同じ(形式を揃える/VALUE・&"" を使う)でそのまま通用します。
運用改善:CSV取り込み時にPower Queryでデータ型を固定する
毎回同じCSVを取り込むたびに「区切り位置」を実行しているなら、そもそも型がズレない仕組みにしたほうが効率的です。
「毎回CSVを落とすので、その都度直すのが面倒」という場合は、対症療法より取り込みの段階で型を固定するのが本筋です。現在はPower Query(パワークエリ)を使うのが主流で確実です。
- [データ]タブ → [データの取得] → ファイルからCSVを選ぶ。
- プレビューで該当列のヘッダーの型アイコンをクリックし、データ型を「テキスト」(コードなら文字列)に指定する。
- [読み込み]で取り込む。以降は同じ手順で更新すれば、毎回同じ型で入ってくる。
一度クエリを作っておけば、次回からはデータを差し替えて[更新]するだけ。形式違いの#N/Aを根本から防げます。
毎月・毎週同じCSVを取り込む業務なら、VLOOKUPを直すよりPower Queryを覚えたほうが結果的に楽になることもあります。
よくある質問(FAQ)
Q. セルの表示形式を「標準」に変えたのに直りません。
表示形式を変えただけでは、文字列の123は文字列のままです(見た目が変わるだけでデータ型は変わりません)。「区切り位置」や VALUE 関数で、実際のデータ型を変換してください。これは本当に多いつまずきです。
Q. 文字列と数値、どちらに揃えるのが正解ですか?
先頭ゼロや英字を含むコードなら文字列、純粋に計算にも使う数量・金額なら数値がおすすめです。「コード(識別用)」か「数量(計算用)」かで判断してください。
Q. 形式を変えたのに反映されません。
再計算されていない可能性があります。F9 キーで再計算し、検索値・マスタの両方が同じ形式になっているか確認してください。
Q. MATCH関数やXLOOKUPでも同じ現象が起きますか?
起きます。原因はVLOOKUPではなく、Excelが数値と文字列を別のデータとして扱う仕様だからです。MATCH、XLOOKUP、INDEX+MATCHでも同様に発生し、対処法もこの記事と同じです。
Q. VLOOKUPのFALSEをTRUEにすると直りますか?
直りません。FALSEは完全一致、TRUEは近似一致の検索ですが、いずれも文字列と数値の不一致は解消されません。むしろTRUEは意図しない値を返すことがあるため、FALSEのまま原因(形式の不一致)を解決することをおすすめします。
Q. CSVを開くたびに毎回#N/Aになります。
CSVをダブルクリックで開くと、Excelが自動的に数値・文字列を判定してしまいます。毎回発生する場合は、Power Queryや[データの取得]から取り込み、対象列を最初からテキスト型に固定するのがおすすめです。
まとめ:1分チェックリスト
VLOOKUPで値があるのに#N/Aになる場合、最も多い原因は「文字列」と「数値」の不一致です。特にCSVやシステム出力データでは頻繁に発生します。まずはTYPE関数でデータ型を確認し、区切り位置・VALUE関数・””で形式を統一しましょう。
原因特定から解決までの流れを整理すると、次のとおりです。
#N/A が出る → マスタに値は存在する → =TYPE() で確認 → 結果が 1/2 や 2/1(形式不一致) → 「区切り位置」または VALUE / "" で形式を統一
=TYPE()(またはISTEXT)で、検索値とマスタが文字列か数値かを判定する。- 元データを直してよいなら → 解決法A(区切り位置/エラーチェックで変換、1列ずつ)。
- 元データを触りたくないなら → 解決法B(
VALUEまたは&""で数式内変換)。 - 先頭ゼロ・英字を含むコードは、必ず「文字列」に揃える。
- それでも直らなければ、空白・全角半角を
TRIM/ASCで潰す。 - 毎回CSVを取り込むなら、Power Queryで型を固定して再発を防ぐ。
VLOOKUPで#N/Aなのに値がある場合、まず疑うべきは「文字列と数値の不一致」です。式を何度見直しても解決しないときは、TYPE関数でデータ型を確認してみてください。原因が分かれば、ほとんどのケースは数分で解決できます。












コメント