「商品コードを入れたら商品名を自動で表示したい」。スプレッドシートを使っていると、こんな場面によく出会いますよね。
手作業で1つずつ探していたら時間がかかりますし、コピペミスも起きがちです。
そんなときに活躍するのがVLOOKUP関数です。検索値を指定するだけで、表から対応するデータを一発で取得できます。この記事では基本の書き方から別シート参照、エラー対処、XLOOKUPとの使い分けまで紹介します。
スプレッドシートのVLOOKUP関数とは?
VLOOKUP関数(読み方: ブイルックアップ関数)は、範囲の先頭列を縦方向に検索する関数です。一致した行から、指定した列の値を返してくれます。
名前はVertical(垂直)+ Lookup(検索)が由来です。「商品コードから商品名を引っ張る」「社員番号から部署名を取得する」。こうした「表引き」作業を数式1つで片付けてくれます。
ポイントは検索する列が範囲の先頭(左端)にあることです。左端以外の列で検索したい場合は、XLOOKUP関数を検討してください。
VLOOKUP関数にできることをまとめると、次のとおりです。
- マスタ表から名前・価格・区分などを自動取得する
- 別シートや別ファイルのデータを参照する
- 近似一致で料金ランク・成績判定を行う
- ワイルドカードで部分一致検索をする
NOTE
VLOOKUP関数はGoogleスプレッドシートの全バージョンで使えます。Excelとの互換性も完全なので、ファイルのやり取りでも安心です。
VLOOKUP関数の書き方(構文と引数)
基本構文
VLOOKUP関数の構文はこちらです。
=VLOOKUP(検索キー, 範囲, 番号, [並べ替え済み])
引数は4つあります。最後の「並べ替え済み」だけ省略できます。
引数の説明
| 引数 | 必須/省略可 | 意味 | 指定例 |
|---|---|---|---|
| 検索キー | 必須 | 探したい値。セル参照が一般的 | A2 |
| 範囲 | 必須 | 検索対象の表。先頭列に検索キーを含むこと | B2:E100 |
| 番号 | 必須 | 範囲の左端から数えて何列目を返すか(1以上) | 3 |
| 並べ替え済み | 省略可 | FALSE = 完全一致 / TRUE = 近似一致 | FALSE |
NOTE
Excelでは「検索値・列番号・検索の型」と呼びますが、スプレッドシートでは「検索キー・番号・並べ替え済み」です。動作は同じなので、Excel経験者はそのまま読み替えてください。
「並べ替え済み」(FALSE / TRUE)の使い分け
ここがVLOOKUPで一番つまずきやすい部分です。
FALSE(完全一致) は、検索キーとぴったり一致するデータだけを探します。実務の9割はこちらです。一致しなければ#N/Aエラーになります。
=VLOOKUP(A2, B2:D100, 2, FALSE)
TRUE(近似一致) は、検索キー以下の最大値を返します。料金表やランク判定に使います。ただし先頭列が昇順ソートされていることが前提です。
=VLOOKUP(A2, F2:G10, 2, TRUE)
NOTE
「並べ替え済み」を省略するとデフォルトはTRUEです。「なぜか変な値が返る」の原因は、たいていこの省略です。迷ったらFALSEを明示してください。
VLOOKUP関数の基本的な使い方
同じシート内でデータを検索する
商品コードから商品名を取得する例で見てみましょう。
A列〜C列に商品マスタがあるとします。A列が商品コード、B列が商品名、C列が価格です。
E2に入力したコードから商品名を取得するにはこう書きます。
=VLOOKUP(E2, A2:C100, 2, FALSE)
各引数の意味は次のとおりです。
- E2: 検索キー(入力した商品コード)
- A2:C100: 範囲(商品マスタ全体)
- 2: 範囲の左から2列目(商品名)を返す
- FALSE: 完全一致で検索
E2に「P-001」と入力すると、A列から「P-001」を探し、同じ行のB列の値を返します。
別シートのデータを参照する
実務では検索先が別シートにあることがほとんどです。シート名のあとに「!」をつけて範囲を指定します。
=VLOOKUP(A2, マスタ!A:D, 3, FALSE)
シート名に空白を含む場合はシングルクォーテーションで囲みます。
=VLOOKUP(A2, '商品 マスタ'!A:D, 3, FALSE)
NOTE
別シートの範囲をマウスで選択すると、シート名と「!」が自動で入力されます。手入力よりもミスが減るのでおすすめです。
範囲を固定するコツ(絶対参照)
VLOOKUPを下方向にコピーすると、範囲がズレることがあります。範囲は絶対参照で固定しましょう。
セル参照を選択した状態でF4キーを押すと「$」がつきます。
=VLOOKUP(A2, $B$2:$D$100, 2, FALSE)
検索キーのA2は相対参照のまま、範囲だけ固定するのが正解です。
なお、列全体を参照する書き方(A:Dなど)ならコピーしてもズレません。ただしデータ量が多いと処理が遅くなる場合があります。
VLOOKUP関数の実務活用パターン
IFERROR関数と組み合わせてエラーを防ぐ
VLOOKUPは検索キーが見つからないと#N/Aエラーを返します。資料として見栄えが悪いですし、後続の計算にも影響します。
IFERROR関数(エラー時に別の値を返す関数)で囲めば、エラーを防げます。
=IFERROR(VLOOKUP(A2, マスタ!A:D, 3, FALSE), "該当なし")
実務では「該当なし」や空文字「””」を指定するケースが多いです。
近似一致(TRUE)で料金ランク判定する
売上金額からランクを判定する場面では、近似一致が便利です。
ランク表が次のようになっているとします。
| 下限金額 | ランク |
|---|---|
| 0 | C |
| 100000 | B |
| 300000 | A |
| 500000 | S |
この表がF2:G5にあるとします。B2の金額に対してランクを返すにはこう書きます。
=VLOOKUP(B2, $F$2:$G$5, 2, TRUE)
B2が250,000なら「B」が返ります。250,000以下の最大値は100,000なので、その行のランクが返る仕組みです。
近似一致を使うときは下限金額を必ず昇順で並べてください。
ワイルドカードで部分一致検索する
「並べ替え済み」をFALSEにした状態でワイルドカードが使えます。
=VLOOKUP("*東京*", A2:C100, 2, FALSE)
「*」は任意の文字列にマッチします。「東京」を含む最初のデータを探したいときに使えます。
セル参照を使う場合は「&」で連結します。
=VLOOKUP("*"&E2&"*", A2:C100, 2, FALSE)
IMPORTRANGE関数と組み合わせて別ファイルを参照する
スプレッドシートならではの活用法です。IMPORTRANGE関数(別ファイルのデータを取得する関数)で取り込んだ範囲をVLOOKUPの検索対象にできます。
=VLOOKUP(A2, IMPORTRANGE("スプレッドシートURL", "マスタ!A:D"), 3, FALSE)
初回はアクセス許可の確認が表示されます。「アクセスを許可」を押せば、以降は自動的にデータを参照できます。
NOTE
IMPORTRANGEは共有ドライブの大規模マスタなどで重宝します。ただしファイルが重くなりやすいので、必要な列だけに絞ると安心です。
複数条件で検索する(補助列の活用)
VLOOKUPは検索キーを1つしか指定できません。「部署」と「役職」の2条件で検索したい場合は、補助列を作ります。
補助列に2つの値を「&」で連結した値を入れます。
=A2&"-"&B2
VLOOKUPの検索キーも同じ形式で連結します。
=VLOOKUP(E2&"-"&F2, 補助列を含む範囲, 列番号, FALSE)
補助列を使いたくない場合は、XLOOKUP関数やFILTER関数も検討してみてください。
よくあるエラーと対処法
#N/Aエラー
「検索キーが見つからない」という意味のエラーです。主な原因と対処法を表にまとめます。
| 原因 | 確認ポイント | 対処法 |
|---|---|---|
| 値が存在しない | マスタ側に該当データがあるか | データを追加するかIFERRORで対処 |
| データ型の不一致 | 数値と文字列が混在していないか | VALUE関数で型を統一 |
| 余分なスペース | 見えない空白が入っていないか | TRIM関数で除去 |
| 範囲がズレている | 絶対参照をつけ忘れていないか | F4キーで$をつける |
#REF!エラー
列番号が範囲の列数を超えているときに出ます。
たとえば範囲がA:Cの3列なのに、番号に4を指定した場合です。列を削除した直後にも起こりやすいので、範囲と番号の対応を確認してください。
間違った値が返る
エラーにはならないのに期待と違う値が返る。これが一番やっかいなケースです。
最も多い原因は「並べ替え済みを省略してTRUEになっている」パターンです。FALSEを明示すれば解決します。
もう1つは範囲の先頭列が検索対象と一致していないケースです。範囲の開始列を見直してみてください。
VLOOKUP関数と他の検索関数の使い分け
VLOOKUPは便利ですが、万能ではありません。場面に応じた関数選びのポイントを整理します。
VLOOKUPの3つの制約
- 左方向に検索できない: 範囲の先頭列でしか検索できません
- 列番号がハードコード: 列の挿入や削除で番号がズレます
- 最初の一致しか返さない: 重複があっても先頭の1件だけです
VLOOKUP / XLOOKUP / INDEX+MATCH 比較表
| 特徴 | VLOOKUP | XLOOKUP | INDEX+MATCH |
|---|---|---|---|
| 左方向検索 | 不可 | 可能 | 可能 |
| 列追加への耐性 | 弱い | 強い | 強い |
| エラー時の既定値 | IFERROR必要 | 引数で指定可 | IFERROR必要 |
| デフォルトの一致方式 | 近似一致 | 完全一致 | 完全一致(0指定) |
| 複数列を一括で返す | 不可 | 可能 | 不可 |
| 数式の読みやすさ | シンプル | シンプル | やや複雑 |
どの関数を選べばいい?
判断基準はシンプルです。
- 左方向の値を取りたい → XLOOKUP関数がベスト
- 複数列の結果を一括で返したい → XLOOKUP関数がベスト
- 条件に合う複数行を抽出したい → FILTER関数の出番
- シンプルな右方向の表引き → VLOOKUPで十分
VLOOKUPは「古い関数」と言われることもあります。ただ、構文がシンプルで直感的なのは大きなメリットです。左方向検索が不要な場面ではVLOOKUPのほうが読みやすい数式になります。
まとめ
VLOOKUP関数のポイントを振り返ります。
- 構文は
=VLOOKUP(検索キー, 範囲, 番号, 並べ替え済み)の4引数 - 「並べ替え済み」は省略せずFALSEを明示するのが安全
- 範囲の絶対参照とIFERRORの組み合わせは実務の必須テクニック
- #N/Aエラーは「データ型の不一致」や「余分なスペース」を疑う
- 左方向検索が必要ならXLOOKUP関数を検討
まずは基本の完全一致検索からはじめてみてください。IFERROR関数やワイルドカードを組み合わせれば、実務のほとんどの場面に対応できます。
