VLOOKUP 関数で、表にあるはずの値なのに #N/A になる、違う値が返ってくる、値を変えても結果が反映されない。こうしたときは、式の書き方よりも「表の中身」や「設定」に原因があることがほとんどです。
この記事では、VLOOKUP がうまくいかない原因を実際の Excel で1つずつ再現し、どこを見れば見分けられるか、どう直すかを説明します。
VLOOKUPがうまくいかない原因の早見表
| 症状 | 原因 | 直し方 |
|---|---|---|
| あるのに #N/A | 数値と文字が混ざっている | 探す値を &"" で文字にする・表をそろえる |
| あるのに #N/A | 後ろや前に空白がある・全角と半角が違う | TRIM で空白を除く・表記をそろえる |
| #N/A | 探す列が範囲の左端にない | 範囲の左端を探す列にする・XLOOKUP を使う |
| #REF! | 列番号が範囲の列数より大きい | 範囲の左端を1として数え直す |
| 違う行の値が返る | 4つ目の引数を省略した(近似一致) | 4つ目に FALSE を入れる |
| 下へコピーすると #N/A | 範囲に $ が付いていない | 範囲を $A$2:$C$5 のように固定する |
| 値を変えても変わらない | 計算方法が「手動」になっている | 計算方法を「自動」に戻す |
| 式がそのまま表示される | セルの表示形式が「文字列」 | 表示形式を「標準」にして入れ直す |
あるのに#N/Aになる・違う値になる例
コードと単価の表から VLOOKUP で単価を探します。101 は正しく 120 が返りました。ところが、表に 103 も A05 もあるのに #N/A になりました(③)。

数値と文字が混ざっている
表の 103 は「文字」として入っています(①、セルの左上に緑の三角が付き、左に寄っています)。探す値の 103 は「数値」なので、見た目は同じでも別のものとして扱われ #N/A になります。CSV やほかのシステムから貼り付けた表でよく起こります。
後ろに空白がある・全角と半角が違う
表の A05 は、後ろに空白が1つ入った「A05 」です(②)。見た目では分かりませんが、”A05″ では一致しません。試したところ、全角の「A05」でも #N/A になりました。一方、大文字と小文字は区別されず、”a05 ” でも見つかりました。
探す列が左端にない・列番号が大きすぎる
VLOOKUP は、範囲のいちばん左の列だけを探します。商品名「みかん」は B 列にあるので、範囲を A 列から始めると見つからず #N/A です。また、範囲が A〜C の3列なのに列番号を 4 にすると #REF! になります(エラー値の一覧と直し方)。
4つ目の引数を省略している
4つ目を省略すると「近似一致」になり、ぴったりの値が無くても近い行の値が返ります。102.5 を探したら、エラーにならずに 102 の行の 80 が返りました(④)。間違いに気付きにくいので、ふつうは必ず FALSE を入れます。
原因別の直し方

| 原因 | 直した式 | 結果 |
|---|---|---|
| 数値と文字 | =VLOOKUP(103&"",$A$2:$C$5,3,FALSE) | 300 |
| 後ろの空白 | =XLOOKUP("A05",TRIM($A$2:$A$5),$C$2:$C$5) | 250 |
| 探す列が左端にない | =XLOOKUP("みかん",$B$2:$B$5,$A$2:$A$5) | 102 |
探す値に &"" を付けると、数値の 103 が文字の “103” になり、表の文字の 103 と一致しました。反対に、表が数値で探す値が文字のときは、探す値を -- や VALUE 関数で数値にします。
表の側に空白があるときは、TRIM で表の空白を除いてから探します。VLOOKUP の範囲には TRIM を付けにくいので、XLOOKUP(Microsoft 365・Excel 2021 以降)を使うと1つの式で書けます。表そのものを直せるなら、置換で空白を消すほうが確実です(全角と半角は 全角・半角を変換する方法)。
左の列を取り出したいときも、XLOOKUP なら探す列と返す列を別々に指定できます(XLOOKUPの使い方まとめ)。
下へコピーすると#N/Aが増える
1行目では正しく動くのに、式を下へコピーすると #N/A が出ることがあります。範囲に $ が付いていないと、コピーした行に合わせて範囲もずれるためです。

4行目の式は、範囲が A4:C7 にずれていました(①)。101 と 102 は範囲の外になったので #N/A です(②)。範囲を $A$2:$C$5 と固定した G 列は、どの行も正しく返りました(③)。範囲を選んだあと F4 キーを押すと $ が付きます(絶対参照・相対参照とは)。
VLOOKUPが反映されない・式がそのまま表示される
値を変えても結果が変わらない
表の単価を変えても VLOOKUP の結果が古いままなら、計算方法が「手動」になっています。試したところ、手動のときは単価を 120 から 999 に変えても 120 のままで、自動に戻すと 999 になりました。[数式]タブの[計算方法の設定]で[自動]を選びます。手動のまま今すぐ計算し直すときは F9 キーを押します。
式が文字のまま表示される

セルの表示形式が「文字列」だと、入力した式が計算されず、そのまま表示されます(①)。表示形式を「標準」に変えたあと、セルを選んで F2 キー → Enter で入れ直すと計算されます。どちらも、手順を画像付きで 数式が反映されない・計算されない原因と対処で説明しています。
よくある質問
#N/A の代わりに空白や「該当なし」を表示したいときは?
原因を直したうえで、本当に表に無い値は IFERROR で置き換えます。=IFERROR(VLOOKUP(E2,$A$2:$C$5,3,FALSE),"該当なし") のように書きます(IFERROR関数の使い方)。原因を確かめる前に IFERROR で隠すと、間違いに気付けなくなるので注意します。
空白のセルを取り出すと 0 になるのはなぜ?
VLOOKUP の仕様です。空白のままにする式は VLOOKUPで0を表示しない・空白なら空白にする方法で説明しています。
VLOOKUP の基本の使い方は?
エクセルのVLOOKUPの使い方で、書き方・複数条件・別シートをまとめています。練習したいときは VLOOKUP関数の練習問題もどうぞ。

コメント