商品コードから単価を引いてくる表を作ったのに、なぜか一部の行だけ「#N/A」。元の表を見ると、そのコードはちゃんとある。月末の集計前にこれが出ると、手で探して直すことになりがちです。
よくある原因を、確かめやすい順に5つ並べました。GoogleスプレッドシートでもExcelでも同じです。例は、A列に商品コード、別シート「単価表」のA列にコード・B列に単価がある形です。
=VLOOKUP(A2,単価表!$A$2:$B$500,2,FALSE)
■1. コードの前後に空白が入っていないか
CSVから貼り付けた表では、「A-100」と「A-100 」(末尾に空白)が混ざりやすく、見た目では区別できません。検索する側の値を TRIM で整えると確かめられます。
=VLOOKUP(TRIM(A2),単価表!$A$2:$B$500,2,FALSE)
これで直るなら、原因は空白です。単価表の側に空白がある場合は、単価表に TRIM した列を作り、そちらを検索します。
■2. 「数字」と「文字の数字」が混ざっていないか
1001(数値)と "1001"(文字列)は、VLOOKUPでは別の値です。セルの左上に緑の三角が出ている、または左寄せになっている数字は、文字列のことが多いです。
検索する側が数値で、単価表が文字列なら:
=VLOOKUP(A2&"",単価表!$A$2:$B$500,2,FALSE)
逆に、検索する側が文字列で単価表が数値なら:
=VLOOKUP(VALUE(A2),単価表!$A$2:$B$500,2,FALSE)
■3. 検索する列が、範囲の一番左にあるか
VLOOKUPは、範囲の一番左の列しか探しません。単価表のB列にコードがあるのに範囲をA列から指定していると、見つかりません。範囲の左端をコードの列にするか、XLOOKUP(Googleスプレッドシート、Excel 2021・Microsoft 365)を使います。
=XLOOKUP(A2,単価表!$B$2:$B$500,単価表!$A$2:$A$500)
XLOOKUPは、探す列と返す列を別々に指定できるので、列の並びを気にしなくて済みます。
■4. 範囲に「$」が付いているか
$を付けずに下へコピーすると、範囲も1行ずつ下にずれます。上の行では見つかるのに、下の行ほど #N/A が増える時はこれです。範囲は $A$2:$B$500 のように固定します。
■5. 最後の引数が FALSE になっているか
これは #N/A ではなく「違う値が返る」原因です。4つ目の引数を省略したり TRUE にしたりすると、完全に一致しなくても近い値を返すことがあります。商品コードや注文番号のような「完全一致させたい」検索では、必ず FALSE(または 0)にします。
■IFERRORで隠す前に
=IFERROR(VLOOKUP(...),"") で #N/A を空白にする方法もありますが、原因を直す前に使うと、単価表に載っていない商品まで空白になり、集計から静かに漏れます。隠すのは、上の5つを確かめて「本当に単価表にない」と分かってからにしてください。
「5つ確かめても直らない」「自分の表だとどこを直せばいいか分からない」という時は、数式を3つまで作り直すサービスがあります。個人情報を除いた表の見本か、エラーが出ている式をメッセージでお送りください。購入前に、3つで足りるかを確認します。
サービス:Excel・スプレッドシートの数式を3つ作ります
毎月の転記や集計そのものを自動にしたい場合は、こちらです。
Office Relayは、数式やGASの作成にAIを活用し、入力と結果の照合・修正を行ってお渡ししています。