📖 このページでわかること
- VLOOKUP関数が「何をしてくれるか」
- 4つの引数(検索値・範囲・列番号・検索方法)の意味
- 完全一致(FALSE)と近似一致(TRUE)の使い分け
- 商品リストから価格を引く具体的な使い方
- 下にコピーするときの絶対参照($)の使い方
- 「#N/A」エラーの原因と、やさしい対処のしかた
- HLOOKUP・XLOOKUP・INDEX+MATCHという仲間の関数
VLOOKUP関数は何をするもの?
VLOOKUP(ブイ・ルックアップ)は、用意した表を縦(垂直)に検索して、見つかった行から対応する値を取り出してくれる関数です。名前の「V」は Vertical(垂直)の頭文字で、表を上から下へ探していくイメージです。
たとえば、国語辞典で「りんご」という言葉を引くと、その横に意味が書いてありますよね。VLOOKUPもまったく同じで、「探す言葉(検索値)」を表の左端から探し、見つかった行の右側にある情報を返してくれます。
手作業だと、長い名簿から目で「えーっと、この社員番号はどこかな…」と探すのは大変ですし、見落としも起きます。VLOOKUPなら、何百行あってもまばたきする間に正しい行を見つけてくれます。一度数式を組んでおけば、検索値を入れ替えるだけで何度でも使える、というのが大きな魅力です。
VLOOKUPの構文(4つの引数)
VLOOKUPには、カッコの中に4つの情報(引数)を順番に書きます。引数と引数のあいだは、半角のカンマ「,」で区切ります。
例)=VLOOKUP(A2, $F$2:$H$4, 3, FALSE)
それぞれの意味は、次のとおりです。まずはざっと眺めて、このあと1つずつ丁寧に見ていきましょう。
| 引数 | 意味 |
|---|---|
| ① 検索値 | 探したいもの。例:商品コードや社員番号、名前。 |
| ② 範囲 | 探す表全体。左端の列が「検索される列」になります。 |
| ③ 列番号 | 範囲の左から何列目の値を返すか(数字)。 |
| ④ 検索方法 | FALSE(完全一致)か TRUE(近い値)。基本は FALSE。省略するとTRUE扱いになります。 |
4つの引数を1つずつ丁寧に
① 検索値 ― 探したいもの
検索値は「これを探してきて」と渡すキーワードです。セルを指定する(例:A2)のが一般的ですが、"A002" のように直接書くこともできます。文字列を直接書くときは、IF関数と同じく ダブルクォーテーション "" で囲む 必要があります。
大切なルールが1つあります。検索値は、範囲(②)の一番左の列にあるものを探します。商品コードで探したいなら、範囲の左端は商品コードの列になっていなければいけません。ここがVLOOKUPで一番つまずきやすいところなので、あとで詳しく説明します。
② 範囲 ― 探す表全体
範囲は「どの表から探すか」を指定します。見出し行(「商品名」などの1行目)を含めても結果は変わりませんが、含めずデータ部分だけを指定するとすっきりします。
範囲の指定には2つのやり方があります。
- セル範囲で指定:F2:H4 のように、データのある四角い範囲を選ぶ方法。表の大きさが決まっているときに向きます。
- 列ぜんぶで指定:F:H のように、列まるごとを選ぶ方法。あとから表に行が増えても自動で対象になるので便利です。
③ 列番号 ― 何列目の値を返すか
列番号は「見つかった行の、どの列の値がほしいか」を数字で指定します。商品名がほしいのか、価格がほしいのかをここで決めます。数え方には大事なルールがあるので、次の見出しでくわしく説明します。
④ 検索方法 ― FALSE か TRUE か
検索方法は、探し方のモードを切りかえるスイッチです。FALSE(または 0)なら「ぴったり同じものだけ」を探す完全一致、TRUE(または 1)なら「だいたい近い値」を探す近似一致になります。この2つの違いは、このあと専用の見出しでじっくり見ていきます。
「列番号」は範囲の左から何列目か
つまずきやすいのが③の列番号です。これはシート全体の列(A列・B列…)ではなく、②で指定した範囲の中で左から数えた番号です。
たとえば範囲を F:H にした場合、F列が1列目、G列が2列目、H列が3列目になります。シート上ではF列が6番目の列ですが、VLOOKUPにとっては範囲の左端なので「1」です。範囲の左端をいつも「1」として数えるのがポイントです。
| 範囲が F:H のとき | 列番号 |
|---|---|
| F列(商品コード) | 1 |
| G列(商品名) | 2 |
| H列(価格) | 3 |
| F | G | H | |
|---|---|---|---|
| 1 | 1列目 | 2列目 | 3列目 |
| 2 | A002 | みかん | 80 |
範囲 F:H では、左端のFが1、Gが2、Hが3。価格がほしいので列番号は「3」(黄色のセル)。
具体例1:商品リストから価格を引く
次のような商品リストが F列〜H列にあるとします。
| F列(商品コード) | G列(商品名) | H列(価格) |
|---|---|---|
| A001 | りんご | 120 |
| A002 | みかん | 80 |
| A003 | ぶどう | 300 |
| F | G | H | |
|---|---|---|---|
| 1 | 商品コード | 商品名 | 価格 |
| 2 | A001 | りんご | 120 |
| 3 | A002 | みかん | 80 |
| 4 | A003 | ぶどう | 300 |
F列〜H列の商品リスト。左端のF列が「検索される列」になります。
セル A2 に商品コード「A002」を入れたとき、その価格を自動で表示したいとします。次のように書きます。
A2の値(A002)を F列から探し、同じ行の3列目(H列=価格)を返す → 80
| A | B | C | |
|---|---|---|---|
| 1 | 商品コード | 価格 | |
| 2 | A002 | 80 |
A2の「A002」を表から探し、C2に価格「80」が自動で表示されます(緑枠が結果のセル)。
仕組みを順番に追うと、こうなります。
- A2 に入っている「A002」を、範囲の左端である F列 から上へ下へと探します。
- 2行目で「A002」が見つかります。
- その行の左から3列目(H列)の値「80」を取り出します。
- 結果として、数式を入れたセルに「80」が表示されます。
VLOOKUPを実際に入力してみよう(手順)
ここからは、上の商品リストを使って、実際に手を動かしながら数式を入れていきます。1ステップごとに画面がどう変わるかをモックで見せますので、まねしながら入力してみてください。途中で式が長く見えても、ひとつずつ足していくだけなので大丈夫ですよ。
- 引っぱってくる元の表(商品リスト)を用意します。ここでは F〜H列に、商品コード・商品名・価格の表があるとします。左端のF列が「検索される列」になることだけ意識しておきましょう。
| F | G | H | |
|---|---|---|---|
| 1 | 商品コード | 商品名 | 価格 |
| 2 | A001 | りんご | 120 |
| 3 | A002 | みかん | 80 |
| 4 | A003 | ぶどう | 300 |
元になる表(青い範囲)。この中から答えを探してきます。
- 結果を出したいセルを選びます。ここではC2に価格を表示したいので、C2をクリックして選びます。A2には探したい商品コード「A002」が入っているとします。
| A | B | C | |
|---|---|---|---|
| 1 | 商品コード | 価格 | |
| 2 | A002 |
答えを出すC2を選択(緑枠)。番地欄が「C2」に変わります。
- 「=VLOOKUP(」と入力します。半角で =VLOOKUP( まで打つと、エクセルが「次は検索値だよ」と引数のヒントを出してくれます。
| A | B | C | |
|---|---|---|---|
| 1 | 商品コード | 価格 | |
| 2 | A002 | =VLOOKUP( |
数式バーに「=VLOOKUP(」と表示されます。ここから引数を足していきます。
- 検索値としてA2を指定します。探したいのはA2の「A002」なので、A2をクリック(または A2 と入力)して、続けて区切りのカンマ「,」を打ちます。
| A | B | C | |
|---|---|---|---|
| 1 | 商品コード | 価格 | |
| 2 | A002 | =VLOOKUP(A2, |
検索値にA2(黄色)を指定。「このコードを探して」とお願いした状態です。
- 範囲として F:H を指定します。探す表のF列〜H列を、列の見出し(F・G・H)をドラッグして選びます。F:H と入力してもOKです。続けてカンマ「,」を打ちます。
| F | G | H | |
|---|---|---|---|
| 1 | 商品コード | 商品名 | 価格 |
| 2 | A001 | りんご | 120 |
| 3 | A002 | みかん | 80 |
範囲F:H(青)を指定。この表の中から答えを探します。左端のF列が検索される列です。
- 列番号として3を指定します。ほしいのは価格(H列)で、範囲F:Hの中では左から3番目です。3 と入力し、カンマ「,」を打ちます。
- 検索方法としてFALSEを指定します。「ぴったり同じものだけ」を探したいので FALSE と入力します。これで完全一致になります。
| A | B | C | |
|---|---|---|---|
| 1 | 商品コード | 価格 | |
| 2 | A002 | =VLOOKUP(A2,F:H,3,FALSE) |
4つの引数がそろいました。列番号3=価格、FALSE=完全一致です。
- 最後に「)」で閉じてEnterキーを押します。カッコを閉じてEnterを押すと、数式が計算され、C2に価格「80」が表示されます。これで完成です。
| A | B | C | |
|---|---|---|---|
| 1 | 商品コード | 価格 | |
| 2 | A002 | 80 |
Enterを押すと結果「80」が表示されます。A2のコードを別のものに変えれば、価格も自動で変わります。
VLOOKUPは、2つの表を「キー(共通の番号や名前)」で突き合わせたいときの定番です。実務ではこんな場面で大活躍します。
・在庫表と発注表の突き合わせ:発注したい商品コードを入れると、在庫表から現在庫数や保管場所を自動で引っぱってくる。
・名簿との照合:社員番号や会員IDを入れると、別シートの名簿から氏名・部署・連絡先を表示する。出席表や名札作りがぐっと楽になります。
・価格表との照合:見積書で商品コードを入れると、マスター価格表から単価を自動入力。手打ちによる金額ミスを防げます。
具体例2:社員番号から氏名を引く
VLOOKUPは名簿でも大活躍します。E列に社員番号、F列に氏名、G列に所属が入っているとしましょう。セル B1 に社員番号を入れたら、氏名を表示する数式は次のとおりです。
B1の社員番号を E列から探し、同じ行の2列目(F列=氏名)を返す
所属も出したいときは、別のセルに列番号を 3 にした式を入れます。検索値(B1)はそのままで、ほしい列だけ変えるのがコツです。
同じ社員番号から、3列目(G列=所属)を返す
具体例3:成績表で点数を引く
名前を入れたら、その人のテストの点数を出す、という使い方もできます。A列に氏名、B列に点数が並んだ成績表で、セル D1 に名前を入れて点数を引いてみましょう。
D1の氏名を A列から探し、同じ行の2列目(B列=点数)を返す
このように、VLOOKUPは「キーになる値を入れたら、対応する情報を引っぱる」という場面ならどこでも使えます。請求書、在庫管理、名簿、成績集計など、実務のあらゆる表で出番があります。
完全一致(FALSE)と近似一致(TRUE)の違い
4つめの検索方法は、VLOOKUPの性格を大きく変える大事な引数です。それぞれ何をするのか、具体例で見ていきましょう。
| FALSE(または 0) | TRUE(または 1) | |
|---|---|---|
| 探し方 | 完全一致 | 近似一致 |
| 意味 | ぴったり同じものだけ | 超えない範囲で一番近い値 |
| 表の並び | 並び順は自由 | 左端列を昇順に並べる必要あり |
| 見つからないとき | #N/A | 一番近い小さい値を返す |
| 主な用途 | コード・番号・名前の検索 | 点数→ランク、金額→割引率などの段階判定 |
完全一致(FALSE)は「ぴったり探す」
商品コードや社員番号のように、1つに決まった値を探すときはFALSEを使います。「A002」を探したら「A002」だけにヒットし、なければ #N/A になります。実務でVLOOKUPを使う場面は、ほとんどがこちらです。
近似一致(TRUE)は「段階で振り分ける」
近似一致は、点数を「80点以上はA、60点以上はB…」のように範囲(区分)で判定したいときに使います。たとえば次のような区分表を、点数の小さい順(昇順)に用意します。
| J列(基準点) | K列(評価) |
|---|---|
| 0 | C |
| 60 | B |
| 80 | A |
A1が72なら、72を超えない一番近い基準点「60」の行を選び「B」を返す
下にコピーするときは「範囲」を$で固定
同じ数式を下の行へコピーして使うことはよくあります。たとえば、たくさんの商品コードを並べて、それぞれの価格をまとめて引くようなときです。このとき、範囲がずれないように 絶対参照($) で固定しておくと安心です。
なぜずれるのでしょうか。数式を下にコピーすると、エクセルは「相対参照」といって、参照する場所も一緒に下へずらします。検索値(A2 → A3 → A4…)は下にずれてほしいので都合がいいのですが、範囲まで一緒にずれてしまうと、表の一部しか見なくなり #N/A の原因になります。
列ぜんぶ(F:H)を範囲にする場合はもともとずれませんが、F2:H4 のように範囲を限定したときは、コピーすると範囲も下へずれてしまいます。これを防ぐために、次のように $ をつけて固定します。
$をつけた範囲は、下にコピーしても固定されたまま動かない
「#N/A」エラーの原因と対処
VLOOKUPで #N/A と表示されたら、それは「探した値が見つかりませんでした」という合図です。こわいエラーではなく「該当なし」のお知らせだと考えてください。よくある原因と対処を、ひとつずつ見ていきましょう。
| 原因 | 対処 |
|---|---|
| 検索値が表の中にない(打ちまちがい) | 検索値と表の値を見くらべて確認する |
| 余分な空白が入っている | TRIMで前後の空白を取り除く |
| 文字列と数値の型違い | どちらかにそろえる(後述) |
| 検索値が範囲の左端列にない | 左端が検索列になるよう範囲を選び直す |
| 範囲が下にずれた(列ズレ) | 範囲を $ で固定する |
下の画面のように、結果のセルに #N/A と出てしまうことがあります。これは「探した値が見つからなかった」という合図です。あわてず、原因を順番に確かめましょう。
| A | B | C | |
|---|---|---|---|
| 1 | 商品コード | 価格 | |
| 2 | A009 | #N/A |
A2の「A009」が表(F列)に存在しないため #N/A に。打ちまちがいや、そもそも表に無いコードが主な原因です。
原因と直し方を、よくある順にまとめました。
- 検索値が表に無い・打ちまちがい → 原因:探したコードが表に存在しない。直し方:検索値と表の値を見くらべ、つづりや番号を確認します。
- 全角・半角のちがい → 原因:見た目は同じ「A002」でも、片方が全角、片方が半角だと別物扱い。直し方:どちらかにそろえます。英数字は半角に統一すると安全です。
- 範囲が下にズレた → 原因:F2:H4 のように限定した範囲を $ で固定せずコピーし、範囲が下にずれた。直し方:範囲を選んで F4キー で $F$2:$H$4 と固定します。
- 検索値が範囲の左端にない → 原因:探したい値が範囲の一番左の列に入っていない。直し方:左端が検索列になるよう範囲を選び直すか、列の並びを入れ替えます。
余分な空白が原因のとき
見た目が同じ「A002」でも、末尾に余分なスペースがあると(「A002 」)、エクセルは別物として扱い #N/A になります。TRIM関数で前後の空白を取り除いた値で試すと、原因がスペースかどうか切り分けられます。
検索値の前後の空白を取り除いてから探す
文字列と数値の型違いが原因のとき
同じ「1001」でも、片方が数値、もう片方が文字列だと、VLOOKUPは別物とみなして #N/A になります。セルの左上に緑の三角マークが出ていたら、数値が文字列として入っているサインです。表と検索値で、数値か文字列かをそろえるのが対処です。
IFERRORでやさしく表示する
「見つからないときは、#N/Aではなく やさしいメッセージを出したい」場合は、IFERROR関数でVLOOKUP全体を包みます。
見つかれば価格を、見つからなければ「該当なし」と表示する
空欄に見せたいときは、メッセージのかわりに ""(空文字)を指定します。=IFERROR(VLOOKUP(A2, F:H, 3, FALSE), "") と書けば、見つからないセルは空白に見えます。
検索値は範囲の「一番左の列」にある
VLOOKUPの最大のクセが、これです。探したい値は、必ず範囲の左端の列に入っていなければなりません。そして、返せるのはその右側の列だけです。
たとえば「商品名から商品コードを引きたい」のに、表が「コード→商品名」の順(コードが左)だと、商品名は右側にあるので検索できません。VLOOKUPは左から右へしか見られないからです。
仲間の関数:HLOOKUP・XLOOKUP・INDEX+MATCH
HLOOKUP(横に探す)
VLOOKUPが表を縦に探すのに対し、HLOOKUP(エイチ・ルックアップ)は表を横(水平)に探します。Hは Horizontal(水平)の頭文字です。月ごとのデータが横に並んでいる表など、見出しが上の行にあるときに使います。構文はVLOOKUPとよく似ていて、「行番号」を指定する点が違います。
XLOOKUP(新しくて使いやすい)
Microsoft 365 や新しめのExcelには、XLOOKUP関数が用意されています。検索する列と返す列を別々に指定できるので、左端しばりがなく、左側の値も引けます。見つからないときの表示もその場で指定できて便利です。
A2をF列から探し、対応するH列の値を返す。なければ「該当なし」
INDEX+MATCH(昔ながらの万能コンビ)
XLOOKUPが使えない環境でも、INDEXとMATCHを組み合わせると、左側の値を引いたり、自由な方向で検索したりできます。MATCHが「何行目にあるか」を調べ、INDEXが「その行の値」を取り出す、という二人三脚です。
A2をF列から探した行番号を使い、G列の値を取り出す(0は完全一致)
少し難しく見えますが、「左の値も引ける」「列を挿入してもズレにくい」といった利点があり、慣れると手放せなくなる組み合わせです。まずはVLOOKUPに慣れてから、必要になったときに覚えれば十分です。
Mac版・バージョンによる違い
VLOOKUP自体は、Windows版・Mac版・古いバージョンを問わず、ほぼ同じように使えます。違いが出やすいのは新しい関数のほうで、XLOOKUPやIFSは新しめのExcel(Microsoft 365 など)でないと使えないことがあります。職場や学校のExcelで使えるかどうかは、実際に入力して試すのが確実です。
VLOOKUPで「0」が表示されてしまいます。なぜ?
TRUE(近似一致)はどんなときに使うの?
検索値に空白が入っていそう。どう確かめる?
左側の列の値を取り出したいときは?
列番号を間違えていないか心配です。どう数えればいい?
同じ検索値が表に2つあるとどうなりますか?
数式をコピーしたら #N/A だらけになりました。なぜ?
VLOOKUPとXLOOKUP、どちらを覚えるべき?
「=VLOOKUP(」と打っても候補が出てこず、入力できません。
範囲は「F:H」と列ぜんぶ、「F2:H4」と限定、どちらがいいですか?
Mac版のExcelでも同じように使えますか?
📌 このページのまとめ
- VLOOKUPは表を縦に検索し、見つかった行の対応する値を返す関数。
- 引数は「検索値・範囲・列番号・検索方法」の4つ。
- 列番号は範囲の左から数えた番号。シートのA・B・Cではない。
- 検索方法は基本 FALSE(完全一致)。省略するとTRUE扱いになるので注意。
- 近似一致(TRUE)は段階判定に使い、左端列を昇順に並べる。
- 下にコピーするときは範囲を $ で固定(F4キーが便利)。
- #N/A は「見つからない」の合図。原因は空白・型違い・列ズレなど。IFERRORで「該当なし」と表示できる。
- 左の値を引きたいときは XLOOKUP か INDEX+MATCH を使う。