Menu

Excelの#N/Aエラー: VLOOKUPやXLOOKUPで見つからない

#N/Aは、検索が探していた値を見つけられなかったという意味です。打ち間違い、余分なスペース、数式を下にコピーしたときにずれた表の範囲を確かめ、本当にない値にはIFNAでメッセージを表示します。

このページのシートはすべて実際に動きます。数値や数式を変えると再計算されます。

#N/Aは「利用できない」という意味で、VLOOKUP、XLOOKUP、MATCHなどの検索が探していた値を見つけられなかったことを表します。下の=VLOOKUP(E2,A2:B6,2,FALSE)は、Kiwiがリストにないので#N/Aを返します。E2をPearに変えると1.5を返します。

ない商品を検索する
F2
ABCDEF
1ProductPriceLook forPrice
2Apple1.2Kiwi#N/A
3Pear1.5
4Plum0.8
5Bread2.4
6Milk1.1
#N/A 探している値が検索範囲にありません。

値が本当にないなら、#N/Aが正しい答えで、この下で紹介するIFNAでメッセージに変えられます。直す価値があるのは、値があるのに検索が失敗するケースです。言語によってはExcelがこのエラーを独自の名前で表示します。ドイツ語では#NV、ポルトガル語とイタリア語では#N/D、ロシア語では#Н/Д、トルコ語では#YOKですが、同じエラーです。

検索を下にコピーした後の#N/A

実際のシートで最もよくある原因です。数式は1行目では動くのに、商品がリストにあるにもかかわらず、下のいくつかの行で#N/Aが表示されます。

$のない表の範囲
F4
ABCDEF
1ProductPriceOrderPrice
2Apple1.2Apple1.2
3Pear1.5Plum0.8
4Plum0.8Pear#N/A
5Bread2.4Milk1.1
6Milk1.1Apple#N/A
#N/A 探している値が検索範囲にありません。

F4をクリックしてください。表の範囲はA4:B8で、F2の範囲より2行下です。数式を下にコピーしたときに範囲も一緒に動いたので、Pear(3行目)とApple(2行目)が範囲から外れました。F3とF5が動くのは、PlumとMilkがまだそれぞれの範囲の中にあるからにすぎません。F2をクリックして範囲を$A$2:$B$6に変えると、列全体がそれに合わせて変わり、すべての価格が表示されます。$記号は範囲を固定します。絶対参照を参照してください。

余分なスペースによる#N/A

末尾にスペースのある"Pear "と"Pear"は、Excelにとって別の値です。スペースは、手で入力したデータ、Webページからコピーしたデータ、ほかのシステムから書き出したデータに紛れ込み、セルの中では見えません。

表の中の末尾のスペース
E2
ABCDEF
1ProductPriceLook forPriceLength of A2
2Pear 1.5Pear#N/A5
3Apple1.2
4Plum0.8
#N/A 探している値が検索範囲にありません。

E2は#N/Aを返します。F2が原因を示しています。Pearは4文字なのに、A2は5文字です。A2のスペースを削除すると、検索が動きます。恒久的に直す方法は3つあります:

  • 列をきれいにする:作業列に=TRIM(A2)を入れて下にコピーし、それをコピーして元の列にホーム > 貼り付け > 値で貼り付けます。
  • 入力する側にスペースがあるなら、検索値にTRIMをかけます:=VLOOKUP(TRIM(D2),A2:B4,2,FALSE)。
  • 数式の中で検索列全体にTRIMをかけます(Excel 2021かMicrosoft 365):=XLOOKUP(D2,TRIM(A2:A4),B2:B4)。

Webページから貼り付けた文字列には、TRIMでは取り除けないノーブレークスペースが含まれていることがあります。SUBSTITUTE(A2,CHAR(160)," ")で置き換える方法はTRIMのページで紹介しています。

値が最初の列にないときの#N/A

VLOOKUPは範囲の最初の列だけを探し、その右にある列を返します。ほかの列にある値で検索すると、表の中にあっても#N/Aが返ります。

コードで検索する
F2
ABCDEFG
1ProductCodePriceCodeVLOOKUPXLOOKUP
2AppleA-171.2P-22#N/APear
3PearP-221.5
4PlumP-310.8
5BreadB-052.4
6MilkM-401.1
#N/A 探している値が検索範囲にありません。

コードはB列にあるので、A2:C6に対するVLOOKUPは商品名の中からP-22を探して失敗します。コードより前にある商品名を返すこともできません。XLOOKUPは検索する列と返す列を別々に受け取るので、Pearを見つけます。Excel 2019以前では、=INDEX(A2:A6,MATCH(E2,B2:B6,0))で同じことができます。

文字列として保存された数値による#N/A

文字列として入力された('1001、あるいはCSVから取り込んだ)注文番号は、数値の1001と一致することがなく、その逆も同じです。どちらのセルにも1001と表示されるので、見つけにくい原因です。Excelでは:

A2:B6 holds order numbers stored as text, E2 holds the number 1001
=VLOOKUP(E2,A2:B6,2,FALSE)          #N/A
=VLOOKUP(E2&"",A2:B6,2,FALSE)       found: E2&"" turns the number into text

A2:B6 holds real numbers, E2 holds "1001" as text
=VLOOKUP(E2,A2:B6,2,FALSE)          #N/A
=VLOOKUP(--E2,A2:B6,2,FALSE)        found: -- turns the text into a number

=ISTEXT(A2)でどちらが文字列かがわかり、セルの隅の小さな緑色の三角形は文字列として保存された数値の印です。列全体を変換するには、文字列を数値に変換するを参照してください。

IFNAかIFERROR: 見つからないときにメッセージを表示する

値がないことが正当にありうるなら、#N/Aより役に立つものを表示します。IFERRORではなくIFNAを使います:

壊れた検索を囲むIFNAとIFERROR
F2
ABCDEFG
1ProductPriceLook forIFNAIFERROR
2Apple1.2Pear#REF!Not found
3Pear1.5
4Plum0.8
5Bread2.4
6Milk1.1
#REF! 存在しないセルを参照しています。

どちらの数式も、2列の範囲の3列目を求めるという間違いをしています。IFNAは#REF!をそのまま通すので、バグが見えます。IFERRORはそれを隠し、リストにあるPearに対して「Not found」と表示します。両方の3を2に変えると、どちらも1.5を表示し、E2をKiwiにするとどちらも「Not found」を表示します。XLOOKUPにはメッセージの機能が組み込まれています:=XLOOKUP(E2,A2:A6,B2:B6,"Not found")。違いについてはIFERRORで詳しく説明しています。

スペースで壊れた検索を直す

スペースがあっても価格を見つける
F2
ABCDEF
1ProductPriceLook forPrice
2Apple 1.2Plum
3Pear 1.5
4Plum 0.8
5Bread 2.4
6Milk 1.1
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

やってみよう: リストの商品はどれも末尾にスペースが付いた状態で取り込まれたので、=VLOOKUP(E2,A2:B6,2,FALSE)は#N/Aを返します。F2に、それでもE2の商品の価格を返す数式を書いてください。

=XLOOKUP(E2,TRIM(A2:A6),B2:B6)は数式の中でリストにTRIMをかけます。ここでは=VLOOKUP(E2&" ",A2:B6,2,FALSE)も動きますが、それはどの商品にも末尾のスペースがちょうど1つある間だけです。長く使える直し方は、TRIMで列をきれいにすることです。

よくある質問

Excelの#N/Aはどういう意味ですか?

N/Aは「not available(利用できない)」の略です。検索関数(VLOOKUP、HLOOKUP、XLOOKUP、MATCH、XMATCH)が、渡された値を見つけられなかったという意味です。グラフで点を0として描く代わりに飛ばすためなど、=NA()でわざと返すこともあります。

値があるのにVLOOKUPが#N/Aを返すのはなぜですか?

2つの値が完全には同じではないからです。よくある理由は、どちらかの末尾のスペース、片方が文字列でもう片方が数値として保存された数値、または$のない表の範囲が数式をコピーしたときに下にずれて、値のある行が範囲から外れていることです。

VLOOKUPが一部の行だけ#N/Aになるのはなぜですか?

数式を下にコピーする前に表の範囲を固定しなかったので、行ごとに範囲が1行ずつ下から始まっています。1行目のA2:B6は2行下ではA4:B8になり、範囲より上の値が見つからなくなります。$で固定します:=VLOOKUP(E2,$A$2:$B$6,2,FALSE)。

XLOOKUPが#N/Aを返すのはなぜですか?

値が検索範囲にないか、スペースがある、数値ではなく文字列である、などの点で違っているからです。XLOOKUPは既定で完全一致なので、近いものは受け付けません。4つ目の引数でエラーを置き換えられます:=XLOOKUP(E2,A2:A6,B2:B6,"Not found")。

MATCHが#N/Aを返すのはなぜですか?

照合の種類が0なら、VLOOKUPとまったく同じで、値が範囲にありません。照合の種類が1か省略の場合は、範囲が昇順に並んでいて、値が最初の項目より小さくない必要があります。完全一致なら=MATCH(E2,A2:A6,0)を使います。

Coddyのプログラミング言語のイラスト

Coddyでコードを学ぼう

始める