- 公開日:
- 更新日:
ExcelのVLOOKUP関数で#N/A(無効な値)エラーの解決法
この記事では、ExcelのVLOOKUP関数で#N/A(無効な値)エラーの解決法をご紹介します。
VLOOKUP関数を使用する際、「#N/A(ノー・アサイン)」エラー表示されることが度々あります。主に書式や引数の使い方を間違えている場合や検索値が存在しない場合に表示されるエラーです。
以下では、「#N/A」エラーが表示される原因の例と解決方法をご説明しています。
ExcelのVLOOKUP関数で#N/A(無効な値)エラーの解決方法
以下では、#N/A(無効な値)エラーの解決方法を6つ紹介します。
- 検索値が検索範囲の左端の列にない場合
- 完全一致を指定していて見つからない場合
- 検索値が検索範囲の最小値よりも小さい場合
- 検索値を参照する列が昇順で並び替えられていない場合
- 小数で計算した値を検索値に使用している場合
- 検索範囲を「絶対参照」にしていないためズレてしまう場合
検索値が検索範囲の左端の列にない場合
VLOOKUP関数は検索値を必ず左端の列にしなければなりません。検索値が検索範囲の左端にない場合は「#N/A」エラーが表示されますので、検索範囲を間違えていないか確認しましょう。
上記の表は、「受注シート」の商品コードを入力すると「価格テーブル」の商品コードに紐づいた商品名を「受注シート」の商品名に表示します。例ではD10セルに「=VLOOKUP(C10,$B$4:$D$6,2,FALSE)」を入力しています。VLOOKUP関数では検索値を探す検索範囲を「左端」にしますが、上記の画像のように検索範囲が「2列目」になっている場合に、結果がどうなるのか試してみます。
D10セルに「#N/A」エラーが表示されました。VLOOKUP関数を使う際に第2引数である「検索範囲」は、第1引数の「検索値」を左端の列に含むようにする必要があります。以下の手順で、「価格テーブル」の商品名と商品コードを入れ替えて正しい結果が得られるようにしましょう。
①「価格テーブル」の商品名(例:B3セルからB6セル)を選択します。②アクティブセルの枠にマウスオーバーさせて上下の矢印にマウスポインターを変形させます。
Shiftを押しながら入れ替えたい列(C列とD列の間)にドラッグします。緑色の太線が表示されたらマウスを離し、次にShiftを離します。
列を入れ替えて検索範囲が左端になったことで、D10セルに正しい結果を取得できました。
完全一致を指定していて見つからない場合
VLOOKUP関数では第4引数の「検索の型」で「FALSE」を指定した場合、完全一致する値がない場合は「#N/A」エラーを返します。
上記の画像の「価格テーブル」の商品コードを見ると、セルの左上にエラーマークが表示されています。
D10セルに「=VLOOKUP(C10,$B$4:$D$6,2,FALSE)」を入力して、このような場合に結果がどうなるのか試してみます。
D10セルに「#N/A」エラーが表示されました。
VLOOKUP関数の第4引数である「検索の型」にFALSEを指定した場合、完全一致である必要があります。
VLOOKUP関数で「検索の型」を完全一致(FALSE)に指定している場合、検索値が一致しているように見えても表示形式の違いなどによって検索ではじかれてしまうことがあります。
以下では、一致しているように見える「商品コード」が、なぜはじかれてしまったのかエラーを確認して、正しい結果を取得できるようにしていきます。
①エラーが出ているセル(例:B4セル)、②エラーチェックオプションの順に選択します。「数値が文字列として表示されています」と表示されています。
「文字列」で表示されている価格テーブルの商品コードと、「数値」で表示されている受注シートの商品コードの表示形式が異なっているため、完全一致として判定されませんでした。
③「数値に変換する」を選択して、文字列を数値に変換します。
検索値の表示形式を統一することで、D10セルに正しい結果を取得することができました。
検索値が検索範囲の最小値よりも小さい場合
VLOOKUP関数では第4引数の「検索の型」で「TRUE」を指定した場合、近似値で検索し、一致するものがなければ検索値の次に小さい値を返します。検索値が検索範囲の最小値より小さい場合は「#N/A」エラーを返します。
「検索の型」を近似値一致(TRUE)に指定している場合、昇順に並べられた検索範囲で「前行の値以上~次行の値未満」に当てはまるすべての数値を近似値として返します。
上記の表で説明すると、検索値に「商品コード」1001、1002、1003、1004と入力した場合は、すべて「商品名」りんごを返します。
例えば「商品コード」1000の近似値である「商品名」を調べる際、C10セルに「1000」、D10セルに「=VLOOKUP(C10,$B$4:$D$6,2,TRUE)」を入力した場合に、結果がどうなるのか試してみます。
D10セルに「#N/A」エラーが表示されました。
VLOOKUP関数の第4引数である「検索の型」に「TRUE」を指定した場合、検索範囲の最小値より大きい値を入力する必要があります。
以下の手順で、検索値を検索範囲の最小値より大きい値に入れ替えて正しい結果を取得しましょう。
C10セルに1001以上の値(例:1004)を入力します。
検索値を検索範囲の最小値より大きい値にすることで、D10セルに正しい結果を取得することができました。
検索値を参照する列が昇順で並び替えられていない場合
VLOOKUP関数では第4引数の「検索の型」で「TRUE」を指定する場合、検索値を参照する列は「昇順」になっていないと、誤った結果や「#N/A」エラーが返されます。
上記の画像は、検索値の検索範囲である商品コードの順番がバラバラになっています。
「商品コード」1002を検索したい場合、C10セルに「1002」、D10セルに「=VLOOKUP(C10,$B$4:$D$6,2,TRUE)」を入力しました。この場合に、どのような結果になるのか試してみます。
D10セルに「りんご」が返されました。
ただし、「価格テーブル」を確認すると、商品コードに紐づいた商品名が違っていることが分かります。
VLOOKUP関数では第4引数の「検索の型」で「TRUE」を指定する場合、検索値を参照する列は「昇順」で並び替えておく必要があります。
以下の手順で価格テーブルを「昇順」に並び変えましょう。
①参照元の価格テーブル(例:B4セルからD6セル)を選択します。②ホームタブ、③並び替えとフィルター、④昇順の順に選択します。
検索値の検索範囲を「昇順」にすることで、D10セルに正しい結果を取得することができました。
小数で計算した値を検索値に使用している場合
小数を計算した結果を検索値にしている場合、演算誤差が発生して「#N/A」エラーが返されることがあります。
上記の画像は、C10セルに「2」を表示させる際に、「=SUM(0.2+0.2+0.2+0.2+0.2+0.2+0.2+0.2+0.2+0.2)」と入力して、D10セルに「=VLOOKUP(C10,$B$4:$D$6,2,FALSE)」を入力します。
この場合に、どのような結果になるのか試してみます。
D10セルに「#N/A」エラーが表示されました。
C10セルは表示上では「2」になっていますが、浮動小数点誤差の影響でExcel内部では「2」未満となっているため、完全一致していないと判定されました。
浮動小数点数とは、小数点の後に続く数値としてExcel内で保存している値になります。Excel内部の計算(2進数)や四捨五入の際に、「#N/A」エラーが返されることがあります。
以下では、少数の計算で「#N/A」エラーが返されないようにROUND関数を使って、指定した桁数で四捨五入する方法をご紹介します。
C10セルの検索値に「=ROUND(SUM(0.2+0.2+0.2+0.2+0.2+0.2+0.2+0.2+0.2+0.2),1)」を入力し、Enterを押します。
ROUND関数は、指定した桁数で表示できるように四捨五入します。もし 計算結果で小数点以下の場合は、第2引数の「桁数」を「0」に設定すると小数点以下第一位が四捨五入されて、整数を返します。書式は「=ROUND(数値,桁数)」です。
ROUND関数を組み合わせて検索値を整数にすることで、D10セルに正しい結果を取得することができました。
検索範囲を「絶対参照」にしていないためズレてしまう場合
VLOOKUP関数の数式をコピーして他のセルでも使用した場合、元の表データの範囲がズレてしまうことがあります。
D10セルには、VLOOKUP関数で取得した商品コードに紐づく商品名が表示されています。D11セルは、D10セルの数式をコピーしましたが、「#N/A」エラーが返されています。
D11セルの数式を確認してみると、検索範囲がずれていることが分かります。
数式をコピーする際は、場合によって絶対参照をする必要があります。
絶対参照とは、数式が入力されたセルの位置に関わらず固定したセルを絶対的な位置として参照することをいいます。
以下の手順で、絶対参照して検索範囲がずれないように設定していきましょう。
D10セルに「=VLOOKUP(C10,$B$4:$D$6,2,FALSE)」を入力して、Enterを押します。
上記の数式では、検索範囲(例:B4セルからD6セル)を絶対参照しています。数式の上で「B4:D6」を選択して「F4」を押すと「$B$4:$D$6」と表示されます。
「F4」が機能しない場合は「Fn」と同時に押すか、手動で「$」マークを入力してください。
D10セルに結果が表示されました。
D10セルのフィルハンドルをドラッグしてD11セルに数式をコピーします。
検索範囲を絶対参照することで、D11セルに正しい結果を取得することができました。
数式バーを確認すると、正しい検索範囲が選択できていることが確認できます。