VLOOKUP関数の練習問題(全5問)
色のついたセルに数式を入力して Enter。範囲はドラッグでも選べます。
コードから商品名を引く
B7 に、B6 のコードに対応する商品名を表から取り出してください。
ヒント 1
「=VLOOKUP(検索値, 範囲, 列番号, FALSE)」の4つを「,」で区切って書きます。
ヒント 2
検索値は B6、範囲は表の部分(A2:C4)、商品名は範囲の2列目です。
解説を見る
VLOOKUP は範囲の左端の列を縦に探し、見つかった行から指定した列の値を返します。ここでは A列でコードを探し、その行の2列目(商品名)を取り出しています。最後の FALSE は「完全に一致するものだけを探す」という意味です。
模範解答: =VLOOKUP(B6,A2:C4,2,FALSE)
FALSE を省略するとどうなるか
B7 に、B6 のコードに対応する商品名を取り出してください。表はコード順に並んでいません。
ヒント 1
4つめの引数を省略すると「近い値を探す」動きになります。
ヒント 2
完全に一致するものだけを探すには FALSE を書きます。
解説を見る
4つめを省略したり TRUE にすると近似一致になり、表が昇順に並んでいることを前提に探します。この表はコード順に並んでいないため正しく引けず、間違った行が返ったり #N/A になったりします(この練習では #N/A になります)。やっかいなのは、たまたま表が並んでいれば省略しても正しい答えが出てしまうことです。データが増えた途端に間違い始めるので、迷わず FALSE を付けてください。
模範解答: =VLOOKUP(B6,A2:B4,2,FALSE)
列番号は範囲の中で数える
B7 に、B6 のコードに対応する単価を取り出してください。範囲は B2:D4 を使います。
ヒント 1
範囲 B2:D4 の左端は B列です。そこを1列目として数えます。
ヒント 2
単価は D列ですが、範囲の中では3列目にあたります。
解説を見る
列番号はシート全体の列番号ではなく、指定した範囲の左端を1として数えます。範囲 B2:D4 では B列が1、C列が2、D列が3です。D列だからといって 4 と書くと、範囲の外を指すことになり #REF! エラーになります。また A列の No を範囲に含めてしまうと、検索するのが A列になり、コードを探せなくなります。
模範解答: =VLOOKUP(B6,B2:D4,3,FALSE)
見つからないときの表示を整える
B7 と B8 に、左のコードに対応する商品名を取り出してください。表にないコードのときは「該当なし」と表示します。
ヒント 1
まず普通に VLOOKUP だけを書いてみてください。B8 のほうが #N/A になります。
ヒント 2
その式を丸ごと IFERROR で包みます。「=IFERROR(VLOOKUP(...),"該当なし")」の形です。
解説を見る
2行を見比べると、IFERROR の働きがはっきりします。見つかった P102 の行はそのまま「ペン」が返り、見つからなかった P999 の行だけが「該当なし」に置き換わります。IFERROR は1つめの計算がエラーになったときだけ2つめの値を返すので、正常なときは何もしません。ただしエラーをすべて隠すことになるため、コードの打ち間違いにも「該当なし」と出てしまう点には注意してください。
模範解答: B7 =IFERROR(VLOOKUP(A7,A2:B4,2,FALSE),"該当なし") / B8 =IFERROR(VLOOKUP(A8,A2:B4,2,FALSE),"該当なし")
取り出した値を計算に使う
C7 に、注文の金額(単価 × 数量)を求めてください。単価は上の表から取り出します。
ヒント 1
まず VLOOKUP で単価を取り出します。単価は範囲の3列目です。
ヒント 2
取り出した単価に、そのまま「*B7」を続けて掛け算します。
解説を見る
VLOOKUP が返すのはただの値なので、そのまま計算に使えます。「=VLOOKUP(...)*B7」のように書けば、単価を取り出してから数量を掛けるところまで1つの数式で済みます。実務では、この形で注文明細の金額欄を作ることがよくあります。
模範解答: =VLOOKUP(A7,A2:C4,3,FALSE)*B7
VLOOKUP関数は、表の左端の列を縦に検索して、見つかった行から指定した列の値を取り出す関数です。
- 書き方
=VLOOKUP(検索値, 範囲, 列番号, FALSE)- 例
=VLOOKUP(B6,A2:C4,2,FALSE)
VLOOKUP関数とは
VLOOKUP(ブイルックアップ)関数は、表から目的の値を探して取り出す関数です。
商品コードから商品名を引く、社員番号から部署名を引く、郵便番号から住所を引く。「コードを入れたら対応する情報が出てくる」という仕組みは、この関数で作ります。
名前の V は Vertical(垂直)の頭文字で、表を縦方向に検索することを表しています。
4つの引数
=VLOOKUP(検索値, 範囲, 列番号, FALSE)
カッコの中は「,」で区切って4つ書きます。
| 位置 | 名前 | 意味 |
|---|---|---|
| 1つめ | 検索値 | 探したい値。例: 商品コード |
| 2つめ | 範囲 | 探す先の表。左端の列が検索対象になる |
| 3つめ | 列番号 | 取り出したい列が、範囲の何列目か |
| 4つめ | 検索方法 | FALSE と書く(理由は後述) |
つまずきポイント1: FALSE を必ず付ける
4つめの引数は省略できます。しかし省略してはいけません。
| 書き方 | 動作 |
|---|---|
FALSE(または 0) |
完全一致。ぴったり同じ値だけを探す |
TRUE(または省略) |
近似一致。「その値以下で最も近いもの」を探す |
近似一致は、表が昇順に並んでいることを前提にした動きをします。並び順がバラバラの表で使うと、間違った行を返したり #N/A になったりします。
しかも厄介なことに、たまたま表が並んでいれば正しい答えが出てしまいます。「動いているから大丈夫」と思っていたら、データが増えた途端に間違い始める、という事故が起こります。
迷ったら FALSE。 これを習慣にしてください。近似一致が必要なのは、点数から評価を求めるような「範囲で区切る」場面だけです。
つまずきポイント2: 列番号は範囲の中で数える
3つめの引数は、シート全体の列番号ではありません。 指定した範囲の左端を1として数えます。
=VLOOKUP(B6, B2:D4, 3, FALSE)
この場合、範囲は B列から D列です。
| 範囲の中の位置 | シート上の列 |
|---|---|
| 1列目 | B列 |
| 2列目 | C列 |
| 3列目 | D列 |
D列が欲しいからといって 4 と書くと #REF! エラーになります。範囲の左端が何列目かを毎回数えるのがコツです。
つまずきポイント3: 検索値は範囲の左端列にある
VLOOKUP は、範囲の一番左の列しか検索できません。
商品コードから商品名を引くことはできますが、商品名から商品コードを引くことはできません。取り出したい列が検索する列より左にある場合、VLOOKUP は使えないのです。
この制限を回避するには、次のどちらかを使います。
XLOOKUP(比較的新しい Excel で使える。左右どちらでも検索できる)INDEXとMATCHの組み合わせ
#N/A が出たとき
#N/A は「探したけれど見つからなかった」という意味です。次の順に確認してください。
| 確認すること | 例 |
|---|---|
| 検索値が本当に表にあるか | 打ち間違い、全角と半角の違い |
| 余分な空白が入っていないか | TRIM で取り除ける |
| 数値と文字列が混ざっていないか | 見た目は同じでも別物として扱われる |
| 範囲の左端列を検索しているか | 検索したい列が範囲の外にある |
見つからないことが想定内なら、IFERROR で包んで表示を整えます。
=IFERROR(VLOOKUP(B6,A2:C4,2,FALSE),"該当なし")
エラーのときだけ「該当なし」と表示し、それ以外は普通に結果を返します。
IFERROR は条件によって表示を変える関数のひとつです。ここでは「エラーになったときだけ別の値に置き換える」とだけ覚えておけば足ります。詳しくは IF関数の使い方 で扱っています。
数式をコピーするときは絶対参照
VLOOKUP を1行だけ書いて、下の行にコピーすることがよくあります。このとき範囲がずれてしまうのが定番の失敗です。
=VLOOKUP(A2,$D$2:$F$100,2,FALSE)
範囲に $ を付けて絶対参照にしておくと、どこにコピーしても同じ表を見に行きます。検索値のほうは行ごとに変わってほしいので $ を付けません。
$ は数式バーで範囲を選んでから F4 キーを押すと付けられます。
関連する関数
| 関数 | 用途 |
|---|---|
XLOOKUP |
VLOOKUP の後継。左方向の検索や「見つからないとき」の指定ができる |
HLOOKUP |
横方向に検索する。表が横並びのときに使う |
INDEX / MATCH |
組み合わせると、左右どちらの方向でも検索できる |
IFERROR |
#N/A のときに別の表示に置き換える |