スプレッドシートのVLOOKUP完全ガイド|基本から応用まで使い方を解説

スポンサーリンク

「社員番号を入れたら、部署名が自動で表示される」。こうした仕組みをGoogleスプレッドシートで作るなら、VLOOKUP関数が定番の選択肢です。Excelで使ったことがある方なら、ほぼ同じ感覚で使えます。

この記事ではスプレッドシートのVLOOKUPを基本から応用まで解説します。4つの引数の意味、#N/Aエラーの原因と対処法まで、実務例を交えて説明します。INDEX/MATCHやXLOOKUPへの移行判断フローも掲載しているので、ぜひ参考にしてください。

スプレッドシートのVLOOKUP関数とは?

VLOOKUPの読み方・意味

VLOOKUPは「Vertical Lookup(垂直検索)」の略です。読み方は「ブイルックアップ」です。

VLOOKUP関数は、表の先頭列(左端の列)を縦方向に検索します。一致した行から、指定した列の値を返す仕組みです。

たとえば「社員番号E001に対応する部署名を取得する」。こうした「表引き」作業を、数式1つで片付けられます。

VLOOKUPでできること

VLOOKUP関数でできる主な操作をまとめました。

  • マスタ表から名前・部署・価格などを自動取得する
  • 別シートに格納したデータを参照する
  • 近似一致(TRUE)で料金ランクや評価判定をする
  • ワイルドカードを使って部分一致検索をする

横方向(水平方向)に検索したい場合は、HLOOKUP関数が対応します。

スプレッドシートの基本操作から確認したい方は、Googleスプレッドシートの使い方入門もご覧ください。

VLOOKUPの書き方(構文と4つの引数)

基本構文

VLOOKUP関数の構文は以下のとおりです。

=VLOOKUP(検索値, 範囲, 列番号, [検索の型])

引数は4つです。最後の「検索の型」だけ省略できます。

引数一覧

引数必須/省略可内容指定例
検索値必須探したいキー値。先頭列で検索するA2
範囲必須検索対象のデータ範囲。先頭列に検索値を含むことA:D
列番号必須返す値がある列の番号(範囲の左端が1)3
検索の型省略可FALSE=完全一致 / TRUE=近似一致FALSE

NOTE

Googleスプレッドシートの公式ヘルプでは「検索キー・番号・並べ替え済み」と表記されます。Excelの「検索値・列番号・検索の型」と呼び名は違いますが、動作は同じです。

完全一致(FALSE)と近似一致(TRUE)の違い

第4引数「検索の型」の使い分けを説明します。

完全一致(FALSE)

検索値と完全に一致するデータだけを探します。一致するデータがなければ#N/Aエラーが返ります。コードや名前の検索など、実務の多くの場面でFALSEを使います。

=VLOOKUP(A2, マスタ!A:D, 3, FALSE)

近似一致(TRUE)

検索値以下の最大値を返します。料金表や成績ランクの判定などに使います。先頭列が昇順(小→大)でソートされている必要があります。

=VLOOKUP(A2, ランク表!A:B, 2, TRUE)

NOTE

第4引数を省略するとデフォルトはTRUE(近似一致)です。「なぜか違う値が返る」の原因の多くはこの省略です。迷ったらFALSEを明示してください。

VLOOKUPの基本的な使い方【実務例で解説】

この記事では「社員名簿」を例に使います。シートには社員番号(A列)・氏名(B列)・部署(C列)・役職(D列)が入力されています。

社員番号から部署名を取得する

F2セルに社員番号を入力し、G2セルに数式を書きます。

01 data sample table
=VLOOKUP(F2, A:D, 3, FALSE)
02 formula vlookup basic

各引数の意味は次のとおりです。

  • F2: 検索値(入力した社員番号)
  • A:D: 範囲(社員名簿全体)
  • 3: 範囲の左から3列目(C列の部署)を返す
  • FALSE: 完全一致で検索

F2に「E001」と入力すると、A列からE001を探します。一致した行のC列(部署)の値がG2に表示されます。

03 result vlookup basic

役職(D列)を取得したい場合は、列番号を4に変えます。

=VLOOKUP(F2, A:D, 4, FALSE)

別シートのデータを参照する

実務では社員名簿が別シートにあるケースが多いです。別シートの範囲は シート名!範囲 の形式で指定します。

=VLOOKUP(F2, 社員名簿!A:D, 3, FALSE)

シート名に空白や特殊文字がある場合は、シングルクォーテーションで囲みます。

=VLOOKUP(F2, '社員 名簿'!A:D, 3, FALSE)

NOTE

別シートの範囲はマウスで選択して入力すると楽です。入力欄でクリックしたまま別シートに切り替え、範囲をドラッグすれば自動でシート名が入力されます。

数式を下方向にコピーする場合

数式を複数行にコピーするときは、範囲を絶対参照($)で固定します。F4キーを押すと$マークが付きます。

=VLOOKUP(F2, $A$1:$D$100, 3, FALSE)

検索値F2は相対参照のまま、範囲だけ固定するのがポイントです。

VLOOKUPの応用テクニック

IFERRORで#N/Aエラーに対処する

VLOOKUPは検索値が見つからないと#N/Aエラーを返します。IFERROR関数(エラー時に代わりの値を返す関数)で囲むと、エラーを別の値に置き換えられます。

=IFERROR(VLOOKUP(F2, 社員名簿!A:D, 3, FALSE), "該当なし")
04 formula vlookup iferror

第2引数に「該当なし」を指定すると、エラー時にその文字列が表示されます。空欄にしたい場合は "" を指定します。

=IFERROR(VLOOKUP(F2, 社員名簿!A:D, 3, FALSE), "")
05 result vlookup iferror

NOTE

IFERROR関数はすべてのエラーを捕捉します。#N/Aだけに対処したい場合は、IFNA関数が適しています。IFNAは#N/A以外のエラー(#REF!など)はそのまま表示します。

ワイルドカードで部分一致検索する

検索の型をFALSEにした状態でワイルドカードが使えます。ワイルドカードとは、任意の文字に一致する特殊記号です。

  • *(アスタリスク): 任意の文字列に一致
  • ?(クエスチョンマーク): 任意の1文字に一致

「営業」を含む部署の社員を検索する例です。

=VLOOKUP("*営業*", A:D, 2, FALSE)

セル参照と組み合わせる場合は & で連結します。

=VLOOKUP("*"&H2&"*", A:D, 2, FALSE)

NOTE

ワイルドカード検索は、最初に一致した1件だけを返します。複数件すべてを取得したい場合はFILTER関数が向いています。

ARRAYFORMULAで複数セルに一括適用する

ARRAYFORMULA関数(配列数式を一括処理する関数)とVLOOKUPを組み合わせます。1つの数式を入力するだけで、複数行に結果を出力できます。

=ARRAYFORMULA(VLOOKUP(F2:F10, 社員名簿!A:D, 3, FALSE))

F2:F10に入力した社員番号に対して、G列に部署名を一括表示します。

IFERRORと組み合わせてエラーも一括処理できます。

=ARRAYFORMULA(IFERROR(VLOOKUP(F2:F10, 社員名簿!A:D, 3, FALSE), ""))

NOTE

Googleスプレッドシートでは検索値に範囲を指定するとスピル(自動展開)する場合があります。ただし明示的にARRAYFORMULAで囲むほうが安全です。

ARRAYFORMULAの詳しい使い方は、ARRAYFORMULA関数の使い方をご覧ください。

複数条件で検索する(ヘルパー列を使う)

VLOOKUPは1つの検索列しか指定できません。「部署と役職の両方が一致する社員を取得する」など、複数の条件を組み合わせたい場合は、ヘルパー列(作業列)で条件を結合する方法が定番です。

手順1: 社員名簿にヘルパー列を追加し、部署(C列)と役職(D列)を & で結合します。

=C2&"-"&D2

C2が「営業部」、D2が「部長」であれば「営業部-部長」という値になります。

手順2: VLOOKUPの検索値でも同じ形式で条件を結合して渡します。

=VLOOKUP(G2&"-"&H2, ヘルパー列を先頭にした検索テーブル, 2, FALSE)

G2に「営業部」、H2に「部長」を入力すると、一致する社員を検索できます。

NOTE

ヘルパー列方式はシートの構成が複雑になります。新規で組む場合は、複数条件を直接指定できるXLOOKUPやQUERY関数の使用も検討してください。

VLOOKUPでよくあるエラーと対処法

#N/Aエラー(値が見つからない)

最もよく出るエラーです。主な原因と対処法をまとめました。

原因確認方法対処法
検索値がデータに存在しないマスタ側に該当データがあるか確認データを追加するかIFERRORで対処
前後にスペースがあるLEN関数で文字数を確認TRIM関数(余分なスペースを除去する関数)で前処理
データ型が違う(数値と文字列)セルの表示形式を確認VALUE関数(文字列を数値に変換する関数)で型を統一
近似一致で昇順でない先頭列の並び順を確認データを昇順ソートするかFALSEを指定
範囲の先頭列に検索値がないVLOOKUPの第2引数を確認範囲を正しく設定し直す
06 error na

#REF!エラー(列番号が範囲外)

列番号が範囲の列数を超えると発生します。たとえば3列の範囲(A:C)に対して列番号4を指定した場合です。

=VLOOKUP(F2, A:C, 4, FALSE)  → #REF!エラー

列の削除後にも発生しやすいため、列番号と範囲の列数を確認してください。

#VALUE!エラー(引数の型が不正)

列番号に0以下の数値を指定した場合に発生します。

=VLOOKUP(F2, A:D, 0, FALSE)  → #VALUE!エラー

列番号は1以上の整数を指定してください。

ExcelのVLOOKUPとの違い

ExcelとGoogleスプレッドシートのVLOOKUPは、基本構文が完全互換です。Excelファイル(.xlsx形式)をスプレッドシートで開いても、VLOOKUPはそのまま動作します。

ただし、細かい点でいくつか違いがあります。

動作仕様の違い

項目GoogleスプレッドシートExcel
配列検索(スピル)検索値に範囲を指定すると自動でスピルExcel 365以降で対応
XLOOKUP関数2022年から利用可能Microsoft 365・Excel 2021以降
正規表現マッチREGEXMATCH関数との組み合わせが可能非対応(VBAが必要)

スピルとは、数式1つで複数セルに結果を自動展開する機能です。

移行時の注意点

ExcelからスプレッドシートにVLOOKUPを移行する際の注意点です。

  • 引数の名称は違うが、動作・構文は同一
  • Ctrl+Shift+Enter で入力した配列数式は不要(スプレッドシートでは自動スピル)
  • 絶対参照($)はそのまま引き継がれる

詳しい比較はExcelとGoogleスプレッドシートの違い・使い分けガイドをご覧ください。

VLOOKUP以外の選択肢|INDEX/MATCH・XLOOKUPとの使い分け

VLOOKUPの限界

VLOOKUPにはいくつかの制約があります。

  1. 左方向への検索ができない: 検索値は必ず範囲の先頭列(左端)に必要
  2. 列番号がハードコード: 列を挿入・削除すると番号がズレる
  3. 先頭の1件しか返さない: 同じ検索値が複数行あっても最初の行だけ

INDEX/MATCHの強み

INDEX/MATCHはINDEX関数とMATCH関数を組み合わせた手法です。INDEX関数(指定した行・列の値を返す関数)とMATCH関数(検索値の行番号を返す関数)を組み合わせます。

=INDEX(返す範囲, MATCH(検索値, 検索範囲, 0))

社員番号からC列(部署)を取得する例です。

=INDEX(C:C, MATCH(F2, A:A, 0))

VLOOKUPとの主な違いをまとめます。

  • 検索列が左端でなくてもよい(右→左の検索が可能)
  • 列参照を使うため、列の挿入・削除でズレない
  • 10万行超の大量データでは処理が速い傾向がある

INDEX関数MATCH関数の詳しい使い方は各記事をご覧ください。

XLOOKUPという新しい選択肢

XLOOKUPはGoogleスプレッドシートに2022年に追加された関数です。VLOOKUPとINDEX/MATCHの両方の制約を解消しています。

=XLOOKUP(検索値, 検索範囲, 返す範囲, [見つからない場合], [一致モード], [検索モード])

社員番号から部署を取得する例です。

=XLOOKUP(F2, A:A, C:C, "該当なし")

VLOOKUPと比べた優位点をまとめます。

  • 検索列は先頭(左端)でなくてもよい
  • 第4引数でエラー時の値を指定できる(IFERROR不要)
  • 右→左、下→上の逆方向検索が可能
  • 複数列をまとめて返せる

どれを使えばいい?選び方の目安

用途に応じて関数を選びましょう。

  1. シンプルな右方向検索 → VLOOKUPで十分
  2. 左方向の検索が必要 → XLOOKUPを使う
  3. 列の追加・削除が多い → XLOOKUPまたはINDEX/MATCHを使う
  4. 大量データ(10万行超) → INDEX/MATCHが高速になる傾向
  5. 既存のVLOOKUP数式 → 正常に動いているなら書き換えは不要

新規で数式を組む場合は、XLOOKUPを選ぶのが現在のベストプラクティスです。

まとめ

スプレッドシートのVLOOKUP関数の要点をまとめます。

  • 構文は =VLOOKUP(検索値, 範囲, 列番号, [検索の型]) の4引数
  • 第4引数はFALSEを明示する(省略するとTRUEがデフォルト)
  • 数式を下方向にコピーするときは範囲を絶対参照で固定する
  • エラー対処はIFERROR関数で囲むのが定番
  • #N/Aエラーの主な原因はスペース混入・データ型の不一致
  • 複数条件の検索はヘルパー列で条件を結合して対応する
  • 左方向の検索が必要な場合はXLOOKUPを検討する

まずは基本の完全一致検索からはじめてみてください。IFERROR関数を組み合わせれば、実務の多くの場面に対応できます。

基本構文だけ確認したい方は、スプレッドシートのVLOOKUP関数の使い方もご覧ください。

関連記事

タイトルとURLをコピーしました