Excel(エクセル)VLOOKUP関数 #N/Aエラーなぜ?#N/Aエラーになる原因解説
ここではExcel(エクセル)のVLOOKUP関数でよく表示されるエラー「♯N/Aエラー」になる原因を解説していきます。
VLOOUP関数を使った例として請求書のテンプレートを作成しました。
商品リストという別シートを参照しています。
商品リストのシートは下図です。
請求書テンプレートの商品コードB16のセルに「101」(商品リストシートのノートパソコンの商品コード)を入力すると、請求書テンプレートの品目欄にノートパソコンと表示されます。
これは請求書のテンプレートの品目の一段目、C16のセルにあらかじめVLOOKUP関数の式(=VLOOKUP(B16,商品リスト!A2:E5,2,0))が入力されているからです。
(VLOOKUP関数の基本的な事に関しては「Excel(エクセル)VLOOKUP関数とは?初心者でも分かる使い方の基本」「Excel(エクセル)VLOOKUP関数 複数条件で抽出する方法」参照)
このようにVLOOKUP関数を使つかうと沢山のデータの中から抽出したい条件に合った値を抜き出すのにとても便利です。
しかし、関数が少し複雑なこともあり扱い方を間違えるとすぐに「♯N/Aエラー」が表示されエラーになります。
#N/Aエラーになる原因として
①VLOOKUP関数の引数の参照先の中身のデータが存在しない
②引数の参照しているデータが文字列になっている
③引数の参照しているデータにスペースが入っている
④全角半角の相違
⑤引数の小数点以下や時刻の差
⑥絶対参照を行っていない
が考えられます。
下の図の未完成の請求書のテンプレートを使って順番に説明します。
C16 、K16のセルにはVLOOKUP関数の式が入力済みですが17行目から22行目までは、まだ計算式が入力されていません。
Excel(エクセル)のオートフィルを使えば良さそうですがこの場合上手くいきません。実際にオートフィル操作をしてみます。
#N/Aエラーになってしまいました。
①引数の参照先のセルにデータが存在しない。
VLOOKUP関数の計算式が正しくても、検索したい値が参照先の表に存在しない場合には「#N/A!」が表示されます。
この場合の「計算式が正しい」というのは「引数」が正しく設定してある、ということに限定されます。
VLOOKUP関数の引数は【検索値】、【範囲】、【列番号】、【検索の方法】の4つが必要です。
(VLOOKUP関数の式「=VLOOKUP(【検索値】、【範囲】、【列番号】、【検索の方法】)」)
この4つの引数を正しい形式で埋めさえすれば、「計算式は正しい」と判断されます。
【検索値】には「B16」のように検索値を入力するセル番号を入力しています。
そして計算式としては問題はないと判断されています。設定されたセルに中身のデータが存在するかどうかは計算してみてから判断するという仕組みなのです。
【範囲】も同様です。とりあえず、【検索値】にはセル番号、【範囲】には範囲のセル番号を入力すれば、計算式は引数をちゃんと設定してくれたと判断し成り立つのです。
Excel(エクセル)の関数にはダイアログボックスで引数に間違った値を入力した時点で警告文やポップアップメッセージが表示されるものがありますが、少なくともそうはならないということです。
しかし、実際に計算してみると引数はちゃんと設定してあっても、引数の中身がおかしい、参照先の表に引数の正しい中身が存在していない場合は#N/Aエラーが表示されます。
実際にエラーになっているセルの計算式を見てみましょう。
= VLOOKUP(B17,商品リスト!A3:E6,2,0)
が2段目の計算式です。
B17に商品コードが記入されていない為、計算式は正しくても引数の中身が存在しない為、#N/Aエラーが表示されています。
②文字列になっている
請求書テンプレート
商品リストシート
商品リストシートの商品コード「159」は数値として入力しています。
通常、セルに数字を入力すれば159は数値として認識されます。
しかし、色々な作業をしている経緯でうっかり、セルの書式設定が標準ではなく文字列になり159が数値ではなく文字列として認識されることがあります。
この場合、セルの書式設定が標準や数値の時の文字列「159」とセルの書式設定が文字列の時の「159」は別の文字とExcel(エクセル)コンピュータは判別してしまうのです。
そのためVLOOKUP関数の計算としては【検索値】「159」に一致する値がなかったと判断し、#N/Aエラーになります。
③スペースが入っている
請求書テンプレート
商品リストシート
商品リストシートの商品コードが数字ではなく文字列である場合を想定します。
「A101」という商品コードを誤って、「A101 」や「 A101」、「A 101」など商品コードの前後や間にスペース(空欄)が入ってしまった場合、空欄も一つの文字列として判別されます。
よって「A101」≠「A101 」≠「 A101」≠「A 101」となり、VLOOKUP関数の検索値と一致する値は見つからなかったということで#N/Aエラーになります。
④全角・半角、が違う
値の片方が全角、他方が半角で入力されている場合、片方がひらがな、他方がカタカナの場合、ひらがな、カタカナの小書き文字が違う場合、例えば片方が「チュ」、他方が「チユ」といった場合、濁点・半濁点が違う場合、例えば片方が「シ゛」(シ+濁点)、もう片方が「ジ」(濁点含め1文字)というように、濁点の具合が違うという場合があります。
この場合も、VLOOKUP関数は#N/Aエラーになります。
⑤小数点以下の差や時刻の秒数の差
セルの表示形式が数値を小数点以下は表示しない設定になっている場合、実際のセルの値は「100.45」であってもセルの表示では「100」になります。
この場合、VLOOKUP関数は表示数値でなく実数値により判断します。
そのため、【検索値】が正真正銘のジャスト「100」であれば、【範囲】の実数値が「100.45」であれば、【範囲】の表示数値が「100」であっても、相違していると判断され#N/Aエラーになります。
時刻においても同じです。
実時間が10:00で10:00と表示されているものと10:00と表示されていても実際は10:00:02である時刻データも相違していると判断され、#N/Aエラーになります。
⑥絶対参照をしていない
VLOOKUP関数の式の【範囲】を絶対参照で入力しない場合、計算式を別のセルにコピーすると、参照先の表の範囲がずれてしまうので#N/Aエラーが表示されます。
絶対参照で設定することで【範囲】がずれないため正しく表示されます。
これらが#N/Aエラーが表示される理由です。
事前に#N/Aエラーの理由が分かっていれば、表や計算式を作るときにエラーが起きないよう対策しながら作成することで作業効率も良くなります。
エラーに対する理解を深めることでスムーズな資料や表の作成に役立てて頂ければと思います。