エクセルでVLOOKUPの使い方|商品コードから名前と単価を引く・#N/Aの直し方

記事
ビジネス・マーケティング
商品コードを入れると、商品名と単価が自動で出る。この仕組みを作るときに使うのが VLOOKUP 関数です。別の表から、同じコードの行を探して値を持ってくる関数です。

下の表で試した結果を書きます。「商品表」シートに、A列が商品コード、B列が商品名、C列が単価の表(2〜5行目・A101〜A104の4商品)があります。「注文」シートのA列に商品コード、B列に数量を入れます。

■ 基本の形
=VLOOKUP(A2,商品表!$A$2:$C$5,2,FALSE)
試した結果(A2がA102のとき):ノート
4つの材料を順に入れます。
・探す値:A2(商品コード)
・探す表:商品表!$A$2:$C$5(左端の列から探します)
・何列目を返すか:2(表の左から2列目=商品名)
・FALSE:完全に一致する行だけを探す(ほぼ必ずこれにします)
表の範囲は $ で固定しておくと、下にコピーしてもずれません。

■ 単価を引いて金額を出す
=VLOOKUP(A2,商品表!$A$2:$C$5,3,FALSE)
試した結果:250(3列目=単価)
金額は =B2*D2 のように、引いてきた単価に数量を掛けます。数量3なら750になりました。

■ #N/A と出たとき
商品表にないコード(A999など)を入れると、#N/A と出ます。
=IFERROR(VLOOKUP(A5,商品表!$A$2:$C$5,2,FALSE),"未登録")
試した結果:未登録
IFERROR で包むと、エラーのかわりに好きな文字を出せます。ただし、ほんとうに打ち間違いのときも隠れるので、「未登録」のように気づける言葉にしておくのがおすすめです。

#N/A が出る原因は、ほかにもあります。
・コードの前後に空白が入っている(TRIM関数で消せます)
・片方が数字、片方が文字になっている(見た目は同じでも一致しません)
・表の範囲が、探したい行まで届いていない

■ 4つ目をTRUEにすると
FALSE のかわりに TRUE(または省略)にすると、「近い値」で探します。表の左端が小さい順に並んでいるときだけ正しく動き、並んでいないと間違った行を返すことがあります。成績の区分けなど、範囲で分けたいとき以外は FALSE にしておくと安全です。

■ 左の列は返せない
VLOOKUP は、探す列より右の列しか返せません。商品名から商品コード(左の列)を引きたいときは、INDEX と MATCH を組み合わせます。
=INDEX(商品表!A2:A5,MATCH("付箋",商品表!B2:B5,0))
試した結果:A104
商品名の列で「付箋」の位置を探し、商品コードの列の同じ位置の値を返します。右の列を返す場合も、同じ形で書けます(=INDEX(商品表!B2:B5,MATCH(A3,商品表!A2:A5,0)) は「付箋」になりました)。

■ 向かない場合
商品表の列を途中で増やすと、「何列目」の数字がずれて、気づかないまま別の列を引くことがあります。表を頻繁に作り替える場合や、何千行もの表で動作が重い場合は、表の作りから整えたほうが楽なことがあります。自分で組み直す時間がないときは、専用の調整サービスもあります。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す