VLOOKUPで#N/Aになる原因6つと確認手順|あるのにエラーになるときの見つけ方

VLOOKUPで#N/Aになるときに、数式とデータの6つの原因を、#N/Aの出方から順に確認する流れを表したイメージ 実務で使うデータ・AIスキル
VLOOKUPが#N/Aになるとき 補足: 数式の3つ・データの3つを順に確かめる

VLOOKUPで商品名を引いたら、#N/Aが並ぶ。探しに行く表に同じコードがあるのに、なぜか見つからない。下の行にコピーしたら、途中から#N/Aが増えた。

最初に確認したいのは、#N/Aがすべての行に出ているのか、一部の行だけかです。

なお私もVLOOKUPは作りながら調べてしまうので、ぜひ以下を参考にしてみてください。

この記事でわかること

  • VLOOKUPで#N/Aになる6つの原因と直し方
  • 突き合わせの漏れを、報告の前に見つける方法

結論:「数式」と「データ」に分けて探す

VLOOKUPの#N/Aは、数式の3つとデータの3つに分けて探すと、原因をしぼれます。

VLOOKUPの#N/Aは、探す値が見つからなかったという意味です。探しに行く表(商品マスタなど)を、この記事では「相手の表」と呼びます。

見る場所ごとの原因は次のとおりです。

  • 数式:検索の型・探す列の位置・範囲のずれ
  • データ:数値と文字列・空白と表記の違い・相手の表にない

まずここから確認:#N/Aの出方から、6つの原因をしぼる

#N/Aがどの行に出ているかで、最初に疑う原因が決まります。

この記事では、1つのExcelファイルにある架空の2つのシートを例にします。

1つ目は「売上表」です。売上を1行ずつ記録したシートで、C列の商品名をVLOOKUPで引きます。

A列:商品コードB列:数量C列:商品名
10013(VLOOKUPで引く)
10031(VLOOKUPで引く)
10022(VLOOKUPで引く)

2つ目は「商品マスタ」です。商品コードごとに、商品名と単価をまとめたシートです。

A列:商品コードB列:商品名C列:単価
1001ボールペン120
1002ノート200
1003ファイル150

売上表のA列の商品コードで、商品マスタから商品名を引きます。数式は売上表のC2に入れ、下の行へコピーします。どちらの表も、1行目は見出しで、データは2行目からです。

=VLOOKUP(A2,商品マスタ!$A$2:$C$4,2,FALSE)

4つの引数(関数の( )に入れる値)は、次のとおりです。

  • 検索値:探す値。ここでは売上表のA2
  • 範囲:探しに行く表。商品マスタの2〜4行目
  • 列番号:範囲の左から何列目を返すか
  • 検索の型:FALSEで完全一致、TRUEで近似一致

疑う原因と最初に見る場所を、#N/Aの出方ごとにまとめると次のとおりです。画面の名前は、Windows版のMicrosoft 365を前提にしています。

#N/Aの出方疑う原因最初に見る場所
#N/Aのほか、違う値が返る行もある1. 検索の型数式の4番目の引数
すべての行が#N/A2. 探す列の位置範囲の1列目
下の行ほど#N/Aが増える3. 範囲のずれ下の行の数式の範囲
新しく足したコードだけ#N/A3. 範囲のずれ範囲の最後の行番号
数字だけのコード(1001など)が、あるのに#N/A4. 数値と文字列セルの揃え・緑の三角
英字入りのコード(A-1001など)が、あるのに#N/A5. 空白と表記の違い検索値の文字数
上のどれでもない一部の行だけ#N/A6. 相手の表にない相手の表を検索

この表の1〜3は数式、4〜6はデータの原因です。

どれに当たるか分からないときは、表の上から順に見ます。1〜3は、数式バー(シートの上にある、セルの中身を表示する欄)の数式と相手の表を見るだけで確かめられます。

原因と直し方:数式の3つ、データの3つ

6つの原因は、数式とデータのどちらを直すかが決まっています。

原因1:検索の型を省略している・TRUEにしている

問題と原因:検索の型を省略すると、TRUE(近似一致)として扱われます。近似一致は、範囲の1列目が昇順(小さい順)に並んでいる前提で、検索値以下で一番大きい値を返す探し方です。

並んでいない表では、#N/Aになったり、違う商品名が返ったりします。違う値が返る行はエラーにならないため、気づきにくい問題です。

確認方法:数式の4番目の引数を見ます。何も書いていないか、TRUEか1なら当てはまります。

どう直すか:4番目の引数にFALSEを入れ、完全一致にします。
=VLOOKUP(A2,商品マスタ!$A$2:$C$4,2) なら、2 の後ろに ,FALSE を足します。

原因2:探したい列が、範囲の左端にない

問題と原因:VLOOKUPは、範囲の1列目だけを探します。たとえば相手の表のA列が登録日、B列が商品コードだと、A列から始まる範囲ではコードが見つかりません。

この場合、すべての行が#N/Aになります。

確認方法:範囲の1列目に、検索値と同じ種類の値(ここでは商品コード)が入っているかを見ます。

どう直すか:範囲を、商品コードの列から始めます。B列にコードがあるなら、$B$2:$D$4 のようにB列から始まる範囲にします。列番号も、新しい範囲の左から数え直します。

返したい列が商品コードより左にあるときは、相手の表で商品コードの列を左へ移します。列を切り取り、移したい場所の列を右クリックして「切り取ったセルの挿入」を選びます。

原因3:範囲がずれている・最後の行まで届いていない

問題と原因:範囲に $ を付けずに数式を下へコピーすると、範囲も一緒に下へずれます。売上表の3行目の数式では、範囲が 商品マスタ!A3:C5 になり、商品マスタの2行目が外れます。

4行目の数式では 商品マスタ!A4:C6 になり、1002がある3行目も外れるため、#N/Aになります。

外れた行のコードを探す行だけが#N/Aになるため、下の行ほど#N/Aが増えます。

商品マスタの5行目以降に足したコードも、範囲の外なので見つかりません。

確認方法:#N/Aが出ている行の数式を選び、数式バーで範囲の行番号を見ます。範囲の最後の行が、商品マスタの最後の行まで届いているかも見ます。

どう直すか:数式バーで範囲を選んで、F4キーを押します。$A$2:$C$4 のような絶対参照(コピーしても動かない参照)になります。直したら、もう一度下の行へコピーします。

行が増えていく表なら、範囲を列全体の 商品マスタ!$A:$C にする方法もあります。

原因4:数値と文字列が混ざっている

問題と原因:同じ「1001」でも、数値の1001と文字列の「1001」は別の値として扱われます。別のシステムから取り込んだ表では、コードが文字列で入っていることがあります。

確認方法:文字列の数値は、セルの左上に緑の三角(エラー インジケーター)が出ることがあります。揃えを変えていなければ、文字列は左揃え、数値は右揃えです。空いているセルに =ISTEXT(A2) と入れ、TRUEなら文字列です。

どう直すか:数値にそろえるなら、セルを選ぶと横に出る「!」のボタンから「数値に変換」を選びます。表示形式を変えるだけでは、入っている値が変わらないことがあります。

「0012」のように先頭に0がつくコードは、数値にすると0が消えます。この場合は、両方の表を文字列にそろえます。

数式の中でそろえる方法もあります。検索値が数値で相手の表が文字列なら、VLOOKUPの1つ目の引数 A2 を A2&"" に書き換えます。逆なら VALUE(A2) にします。

文字列の数値を列ごとに見つける方法(COUNT関数とCOUNTA関数の比べ方)は、次の記事にまとめています。

原因5:余分な空白や、表記の違いがある

問題と原因:完全一致では、文字がすべてそろっているときだけ見つかります。「A-1001 」のように末尾に空白があると、「A-1001」とは別の値です。

ハイフンの種類や、全角と半角の違いも、別の値として扱われることがあります。

確認方法:空いているセルに =LEN(A2) と入れ、文字数を数えます。「A-1001」なら6のはずです。相手の表のセルも同じように数えます。

どう直すか:TRIM関数で余分な空白を取り除きます。空いている列に =TRIM(A2) と入れ、下の行へコピーします。

その列をコピーし、A列に値として貼り付けます(右クリックの「貼り付けのオプション」で「値」)。相手の表に空白があるときは、相手の表で同じようにします。

表記の違いは、置換(Ctrl+H)などで1つの書き方にそろえます。

原因6:探す値が、相手の表に本当にない

問題と原因:相手の表に登録していない新しいコードは、どう書いても見つかりません。

検索値のセルが空の行も、#N/Aになることがあります。入力前の行まで数式をコピーしてあると起きます。

確認方法:#N/Aの行のコードを、相手の表のシートでCtrl+F(検索)で探します。「オプション」で「セル内容が完全に同一であるものを検索する」に印を付けると、一部だけ同じコードを除けます。

どう直すか:登録漏れなら、相手の表に足します。相手の表にないのが正しい行(取り扱いをやめた商品など)は、その行を集計から外すか、理由を書き残しておきます。

それでも#N/Aが消えないとき:2つのセルを「=」で直接比べる

6つを確かめても#N/Aが消えないなら、検索値と相手の表のセルを「=」で直接比べます。

空いているセルに =A3=商品マスタ!A4 のように入れます。売上表のA3(1003)と、同じ1003に見える商品マスタのA4を比べる例です。

  • FALSEなら:データが違う(原因4・5)
  • TRUEなら:数式が違う(原因1〜3)

FALSEで、空白も表記も同じに見えるときは、TRIM関数で取れない文字が入っていることがあります。=LEN() で両方の文字数を比べ、多い方をCLEAN関数(印刷されない文字を取り除く関数)や置換で直します。

数式の途中の計算は、数式のセルを選び、「数式」タブの「数式の検証」で1段ずつ見られます。

数式を直しても結果が変わらないときは、計算方法が手動になっていることがあります。数式が計算されない原因は、次の記事で確かめられます。

業務への着地:突き合わせの漏れを、報告の前に見つける

VLOOKUPの#N/Aは突き合わせで漏れた行の印なので、報告の前に確かめると、集計漏れを防げます。

VLOOKUPは、売上表に商品名や単価を付けるときや、名簿どうしを照らし合わせるときに使われます。どちらも2つの表の突き合わせで、#N/Aの行は相手の表に同じ値が見つからなかった行です。

#N/Aの行を見落としたまま集計すると、漏れた行が商品ごとの合計に入りません。その数字が報告書(会議や上司に出す集計表)に載ると、一部の商品だけ少なく見えたまま話が進みます。

#N/Aの行は、「データ」タブの「フィルター」で#N/Aだけを表示すると、まとめて確かめられます。単価などもVLOOKUPで引いているなら、その列をSUMで合計すると結果も#N/Aになります。漏れに気づくきっかけにもなります。

比べると次のとおりです。

場面BeforeAfter
#N/Aが出たとき見落として集計する出方から原因をしぼる
報告書に写す前そのまま写す#N/Aの行が残っていないか確かめる

この表では、漏れに気づくのが報告書を出す前になっています。

#N/Aの行を確かめてから写すと、出した後に数字を直す手間が減ります。見つからなかったコードが分かれば、相手の表の登録漏れも直せます。翌月の突き合わせで、同じ#N/Aを探さずに済みます。

商品ごとの合計を足して全体の合計と比べる検算は、次の記事で紹介しています。

まとめ

VLOOKUPで#N/Aになるときは、数式(1〜3)→データ(4〜6)の順に確認します。

  1. 検索の型がFALSEになっているか
  2. 探す列が範囲の左端にあるか
  3. 範囲に $ が付き、最後の行まで届いているか
  4. 数値と文字列がそろっているか
  5. 余分な空白や表記の違いがないか
  6. 相手の表に本当にあるか

それでも消えないときは、2つのセルを「=」で直接比べます。報告の前に、#N/Aの行が残っていないかを確かめます。

次に読む記事

VLOOKUPは、「Excelできます」の中級の目安によく挙がる関数です。関数を覚えた先で業務に求められることは、こちら。

関数の基本や表の整え方から確かめたいときは、こちらから。

タイトルとURLをコピーしました