VLOOKUP関数の使い方|#N/Aの直し方まで図でわかる【サンプル付き】
書き方はこれだけ
=VLOOKUP(探す値, 表の範囲, 何列目, FALSE)商品コードから商品名や単価を、社員番号から部署を、のように「表の左端の列で探して、同じ行の右側の値を持ってくる」関数です。4つ目は、ほとんどの場合 FALSE(完全に一致するものだけ)でOKです。
この図の表をExcelファイルでダウンロード(問題と答えのシートつき)
4つの引数の意味
| 引数 | 入れるもの | 図の例 |
|---|---|---|
| 探す値 | 探したいコードや番号が入ったセル | A2 |
| 表の範囲 | 探す相手の表。探す列が左端になるように選び、$を付けて固定する | $A$8:$C$12 |
| 何列目 | 範囲の左端を1列目として、持ってきたい列が何列目か | 2(商品名)/3(単価) |
| FALSE / TRUE | FALSE=完全に一致するものだけ。TRUE=近い値(送料表などの区分け) | FALSE |
つまずきの9割は、2つ目と3つ目です。「範囲の左端に探す列が来ているか」と「列は範囲の左端から数えているか(シートのA列から数えるのではない)」の2つを、まず確かめてください。
入れ方の手順と、下へコピーするときの注意
- 結果を出したいセル(図ではB2)を選んで、
=VLOOKUP(と入力関数名は小文字で打っても大丈夫です。途中で出てくる候補から選んでもかまいません。 - 探す値のセル(A2)をクリックして「,」直接
A2と打ってもOKです。 - 表の範囲(A8:C12)をドラッグして、すぐ F4 キーを押す
$A$8:$C$12に変わります。これを忘れると、次の手順で式がずれます。ノートパソコンでF4が効かないときは Fn を押しながら F4 です。 - 「,2,FALSE)」と入れて Enter2は「範囲の2列目」です。
- セルの右下の■をドラッグして、下の行へコピー同じ式が、探す値だけ A3、A4…と変わりながらコピーされます。
$を付け忘れると、下の行で #N/A になる
$なし(失敗)
$あり(正解)
上の行は正しく出ているのに、下のほうだけ #N/A になる、というときは、ほぼこれが原因です。式の入ったセルを選んで、範囲に $ が付いているかを見てください。
#N/Aが出るときの直し方
#N/Aは「探したけれど見つからなかった」という意味です。本当に表にない場合のほかに、目で見ると同じなのに、Excelには別の値に見えていることがよくあります。原因の多い順に並べました。
1数字と文字が混ざっている
1001(数値・右寄せ)1001(文字列・左寄せ・緑の三角)社員番号や商品番号がほかのシステムから貼り付けたデータだと、見た目は同じ「1001」でも、片方が文字として入っていることがあります。セルの左上に緑の三角が出ていたり、数字なのに左に寄っていたりしたら、これです。
直し方表の左端の列を選んで、出てくる「!」から「数値に変換する」を選びます。式の側で直すなら、探す値を A2&""(文字にそろえる)や A2*1(数値にそろえる)にします。
2全角と半角がちがう
A-101(全角)A-101(半角)手で入力したコードと、システムから出したコードで、英字やハイフンの全角・半角がちがうことがあります。画面ではほとんど見分けがつきません。
直し方どちらかにそろえます。半角にそろえるなら =ASC(A2) で作った列を使うか、探す値を ASC(A2) にします。
3見えない空白が入っている
B-202␣(末尾に空白)B-202コピーしたデータの末尾や先頭に、空白が1文字だけ入っていることがあります。見た目ではまず分かりません。
直し方=TRIM(A2) で前後の空白を消した値で探します。探す値を TRIM(A2) にしてもOKです。
4探す列が範囲の左端にない
商品名で探したい範囲の左端は商品コードVLOOKUPは、範囲のいちばん左の列でしか探しません。商品名から商品コードを引くように、左側の値を持ってくることもできません。
直し方範囲を、探す列から始まるように選び直します。左側の値を持ってきたいときは、XLOOKUP か INDEX と MATCH を使います。
5本当に表にない・範囲が足りない
C-302(表に行がない)新しく追加した商品が範囲の外にある、または本当に未登録、というケースです。
直し方範囲を最後の行まで含むように広げます。増えていく表なら、列ごと $A:$C と指定するか、表を「テーブル」にしておくと自動で広がります。
#N/A以外のエラーと、おかしな結果
| こうなったら | 原因と直し方 |
|---|---|
| #REF! | 3つ目の「何列目」が、範囲の列数より大きい。範囲が3列なら、指定できるのは1〜3です。範囲を広げるか、数字を直します。 |
| #VALUE! | 3つ目が0以下になっている。1以上の数にします。 |
| #NAME? | 関数名のつづり間違い(VLOOKUPの綴り、全角で入力など)。半角で入れ直します。 |
| 0 が表示される | 見つかった行の、持ってくる列のセルが空っぽ。元の表を確かめます。 |
| 違う行の値が出る | 4つ目を省略しているか TRUE になっている。完全一致で探すなら FALSE を入れます。 |
| 列を挿入したら結果がずれた | 「何列目」は数字で固定されているので、表の途中に列を足すとずれます。表の形が変わるなら、XLOOKUP が向いています。 |
仕事での使いどころ
| 場面 | 探す値 | 表(マスタ) | 持ってくるもの |
|---|---|---|---|
| 見積書・請求書 | 商品コード | 商品一覧 | 商品名・単価 |
| 勤怠・給与の集計 | 社員番号 | 社員名簿 | 氏名・部署・時給 |
| 売上の集計 | 取引先コード | 取引先一覧 | 会社名・担当者 |
| 在庫の確認 | JANコード・品番 | 在庫表 | 在庫数・置き場所 |
| 名簿の照合 | 会員番号 | 別の名簿 | あるか・ないか(#N/Aなら未登録) |
共通しているのは、「番号やコードは毎回打つけれど、名前や金額は表から持ってきたい」場面です。手で写していると、写し間違いと、マスタを直したときの直し漏れが必ず出ます。VLOOKUPにしておけば、マスタを1か所直すだけで、すべての書類に反映されます。
TRUE(近似一致)の使い方:送料表・手当表
4つ目を TRUE にすると、「ぴったり同じ値」ではなく「その値以下でいちばん近い値」の行を探します。送料表、通勤手当の距離区分、売上に応じた評価ランク、年齢区分など、区切りで分ける表で使います。
使うときの決まりは2つです。表の左端を小さい順(昇順)に並べることと、いちばん上を0など一番小さい値にしておくこと。順番がばらばらだと、エラーにならずに違う値を返すので気づきにくいです。
よく一緒に使うもの
見つからないときに #N/A ではなく「未登録」と出す(IFERROR)
"" にします。書類として印刷するなら、#N/A が並ぶより見やすくなります。ただし、本当は直すべき入力ミスまで隠れてしまうので、表が完成してから最後に付けるのがおすすめです。
商品一覧を別のシートに置く
マスタは別シートに分けておくのが、職場ではいちばん多い形です。商品が増えていく表なら、範囲を少し下まで広めにとっておくか、列ごと 商品一覧!$A:$C と指定しておくと、追加のたびに式を直さずにすみます。
条件が2つあるとき(支店と月など)
& でつないだ「補助列」を作ります。探す値も同じように ="新宿"&"12月" とつなげて探します。VLOOKUPは1つの列でしか探せないので、条件が2つなら、2つをつないだ列を左端に作るのが確実です。XLOOKUPが使える環境なら、補助列なしでも書けます。
XLOOKUPとどちらを使う?
| VLOOKUP | XLOOKUP | |
|---|---|---|
| 使えるExcel | すべてのバージョン | Microsoft 365、Excel 2021・2024、Web版(2019以前は使えない) |
| 探す列 | 範囲の左端だけ | どの列でもよい(左側の値も持ってこられる) |
| 持ってくる列の指定 | 「何列目」の数字 | 列そのものを選ぶ(列を挿入してもずれない) |
| 見つからないとき | #N/A(IFERRORで包む) | 4つ目に「未登録」などを直接書ける |
| Googleスプレッドシート | 使える | 使える |
自分だけで使うファイルで、Microsoft 365を使っているなら、XLOOKUPのほうが間違えにくいです。ただ、取引先や社内の古いExcelでも開くファイルなら、どこでも動くVLOOKUPのほうが安全です。XLOOKUPを2019以前のExcelで開くと、#NAME? になります。くわしくはXLOOKUP関数の使い方で。
サンプルファイルで試す
このページの表を、そのままExcelファイルにしました。「問題」のシートの黄色いセルに式を入れて、「答え」のシートと見比べてください。Googleスプレッドシートにアップロードしても使えます。
よくある質問
4つ目の FALSE は省略してもいいですか?
省略すると TRUE(近似一致)として動き、表の並び順によっては違う行の値を返します。エラーにならないので気づきにくいのがやっかいです。コードや番号で探すときは、必ず FALSE を入れてください。
同じコードが2行あるときはどうなりますか?
上から探して、最初に見つかった行の値を返します。2つ目以降は取れません。重複していないかは、COUNTIF関数で数えると確かめられます。
大文字と小文字は区別されますか?
区別されません。「a-101」で探しても「A-101」の行が見つかります。
左側の列の値を持ってくることはできますか?
VLOOKUPではできません。範囲の左端より左の列は使えないので、XLOOKUP か、INDEX と MATCH の組み合わせを使います。
Googleスプレッドシートでも使えますか?
はい。同じ書き方で使えます。別のシートを参照するときも、シート名!範囲 の形は同じです。
式が長くなって分かりにくいです。
範囲に名前を付けておくと読みやすくなります。範囲を選んで、左上の名前ボックスに「商品一覧」と入れておけば、=VLOOKUP(A2,商品一覧,2,FALSE) と書けます。
一緒に覚えたい関数
このページについて
操作の説明は Microsoft 365 の日本語版Excel(Windows)に合わせています。図はこのサイトで作ったもので、表の会社名・商品名は架空です。運営者情報