【仕事で使える】VLOOKUP関数の基本解説/複数条件の作り方/データ入力規則で品質向上
VLOOKUP関数とは?
VLOOKUPは、表の左端の列をキーにして、同じ行の別の列から値を取り出す関数です。商品コードから価格を返す、社員番号から所属を返すなど、日常の検索に向いています。関数名のVは縦(Vertical)を意味し、縦方向に並ぶデータを上から下へ探します。
一方で、VLOOKUPにはいくつかの弱点があります。検索する列は範囲のいちばん左に置く必要があること、列の追加や順番変更に弱いこと、戻り値の列番号を数字で指定するため管理が煩雑になりがちなことなどです。これらの点は、後述するINDEX/MATCHやXLOOKUPで補える場合があります。
VLOOKUPは「完全一致」と「近似一致」を選べます。完全一致は検索値と同一の値を探す方法で、日付やコードの検索に向いています。近似一致は並び順に意味のある区間で使い、税率や運賃表のように「最も近い範囲」を返したいときに使います。ふだんは誤判断を避けるため、完全一致を基本に考えると理解しやすくなります。
引数の意味
VLOOKUP(検索値, 範囲, 列番号, [検索方法]) の順で指定します。
- 検索値:見つけたい値。セル参照で渡すのが一般的です。
- 範囲:見出しを含む表。検索のキーはこの範囲の左端列に置きます。
- 列番号:範囲の左端を1として、取り出したい列の番号を指定します。
- 検索方法:完全一致はFALSE(0)、近似一致はTRUE(1)または省略です。
ミニQA:VLOOKUPは検索列の左側も参照できますか?
標準のVLOOKUPは、範囲の左端列より左にあるデータを直接返せません。INDEX/MATCHやXLOOKUPを使うか、ヘルパー列を設ける方法が一般的です。
構文
VLOOKUPの基本構文は次のとおりです。
=VLOOKUP(検索値, 範囲, 列番号, [検索方法])
覚え方は「探すもの→どこで→何列目→一致の種類」です。書きやすく間違えにくい形にするため、範囲は絶対参照($記号)で固定し、列番号は変数や構造化参照で管理すると安全です。
構文の理解を深めるには、実際のセル参照で考えるとわかりやすくなります。例えば、検索値がB4、検索範囲が$F$3:$H$20、戻り値が左から3列目、完全一致なら、
=VLOOKUP(B4, $F$3:$H$20, 3, FALSE)
引数の意味
- 検索値:入力の揺れを避けるため、後述のデータ入力規則でプルダウン化すると誤入力を減らせます。
- 範囲:列の追加でずれないよう、テーブル化(Ctrl+T)や範囲名の付与を検討します。
- 列番号:列挿入に弱い点を補うには、COLUMN関数と組み合わせて動的に番号を作る方法があります。
- 検索方法:完全一致(FALSE)を標準とし、近似一致(TRUE)は並びと区間が適切なときだけ使います。
ミニQA:範囲はなぜ絶対参照にするの?
式を下や右へコピーすると範囲アドレスがずれてしまうためです。$で固定しておけば、参照範囲が動かず同じ表を確実に参照できます。
単一条件でのVLOOKUP使用例
ここでは、社員コードから部署名と内線番号を取り出す簡単な例で練習します。
まずは次のような表を用意します(サンプル)。
| 社員コード | 氏名 | 部署 | 内線 |
|---|---|---|---|
| E001 | 佐藤 | 営業 | 1201 |
| E002 | 鈴木 | 総務 | 2304 |
| E003 | 田中 | 開発 | 3402 |
検索セルに社員コードを入力し、結果セルに次の式を入れます。
- 部署を返す:=VLOOKUP(入力セル, $A$2:$D$4, 3, FALSE)
- 内線を返す:=VLOOKUP(入力セル, $A$2:$D$4, 4, FALSE)
手順のポイントは3つです。
- 範囲は表全体を選択し、$で固定する
- 列番号は「左から数えて何列目か」を意識する
- 検索方法は誤判定を避けるためFALSE(完全一致)にする
コピーで列番号だけ変えたい場合は、COLUMN関数を使って「今いる列に応じて何列目か」を自動化できます。例えば、部署列で=VLOOKUP($G$2, $A$2:$D$4, COLUMN(C:C), FALSE)のように指定すると、右へコピーしても列番号が追随します。
手順(サンプル表→式入力→エラー確認→列固定)
- 表を作る(A1:D4)
- 検索値セル(G2)を用意して社員コードを入力
- 結果セル(H2)に式を入力:=VLOOKUP($G$2, $A$2:$D$4, 3, FALSE)
- 結果が#N/Aなら、コードのスペース混入や全角半角、前後の空白を確認
- 範囲に$を付け、コピーしても参照が動かないか確認
ミニQA:#N/Aが出る主な原因は?
検索値とキー列の値が一致していないときに出ます。前後の空白、表側の重複、データ型の不一致(数値と文字列)などを確認しましょう。TRIMやCLEAN、VALUEなどの補助も役立ちます。
複数条件でVLOOKUP関数を使う方法
VLOOKUPは単一の検索値に基づいて行を探します。複数条件で検索したい場合は、条件を結合して「一つの検索値」にまとめる工夫が必要です。代表的な方法は、ヘルパー列を使う方法、CHOOSE関数で仮想の左端列を作る方法、そして別関数(XLOOKUPなど)へ置き換える方法です。
方法の概要(ヘルパー列方式/CHOOSE方式/XLOOKUPとの違い)
- ヘルパー列方式:検索のキーとなる列を新しく作り、条件をつなげた文字列を保存します。式は扱いやすく、高速で安定します。
- CHOOSE方式:元の表を変えたくないときに、式の中で仮想の2列配列を作ります。図表の構造を壊さずに済みますが、配列式の理解が必要です。
- XLOOKUP:複数条件をそのまま渡すのは得意ではありませんが、FILTERやTEXTJOINと組み合わせると柔軟です。左側参照や列挿入に強い利点もあります。
ステップ解説(条件連結→検索列作成→式投入→検証)
例:名前と性別の2条件で年齢を返すケースを考えます。
- 条件連結のルールを決める:例えば「名前 & \”|\” & 性別」のように区切り記号を入れる
- 検索列(ヘルパー列)を作る:=名前セル & \”|\” & 性別セル をキー列に計算して保存
- 入力側でも同じ規則で検索値を作る:=入力_名前 & \”|\” & 入力_性別
- VLOOKUPで検索:=VLOOKUP(結合した検索値, キー列を左端に含む表, 目的列番号, FALSE)
- 検証:同姓同名・欠損・全角半角などを確認し、重複があればシリアル番号などの追加条件を検討
CHOOSE方式の例(ヘルパー列を作らない):
=VLOOKUP(入力_名前 & \”|\” & 入力_性別, CHOOSE({1,2}, 名前列 & \”|\” & 性別列, 年齢列), 2, FALSE)
配列ブレース{1,2}は、左端列(1)に結合キー、2列目に返したい列を割り当てる指定です。
手法比較(概要)
| 手法 | 追加列の有無 | 設定の難易度 | 速度/安定性 | メリット | 注意点 |
|---|---|---|---|---|---|
| ヘルパー列 | あり | やさしい | 高い | 式が単純、監査しやすい | 列を増やせない環境では不可 |
| CHOOSE | なし | やや難しい | 中 | 表を変えない、書類の体裁を守れる | 配列の理解が必要、可読性が下がる |
| XLOOKUP等 | なし | 中 | 高い | 左側参照、列挿入に強い | 旧バージョンでは使えない |
ミニQA:ヘルパー列を作れないときは?
CHOOSE方式で仮想列を作るか、INDEX/MATCHを用いる方法があります。いずれも式内で結合したキーを作り、完全一致で検索します。
データ入力規則と組み合わせる方法
検索値の入力ゆれがあると、VLOOKUPは正しく見つけられません。データ入力規則でプルダウン(リスト)を設定し、入力候補から選んでもらうと、スペルミスや表記ゆれを避けられます。
ここでは「名前」と「性別」にプルダウンを設定し、その選択をもとに複数条件のVLOOKUPを行う一連の流れを紹介します。
手順(例:名前と性別にプルダウンを設定)
- 候補リストを作る:別シートに「名前一覧」「性別一覧」を縦に並べる(重複は削除)
- 範囲名を付ける:それぞれの一覧にわかりやすい名前を付与(例:NameList, GenderList)
- 入力セルを決める:検索用の名前セル(B2)、性別セル(C2)などを用意
- データ入力規則を設定:
- 種類を「リスト」にし、元の値に=NameListや=GenderListを指定
- セル内ドロップダウンをオンにし、空白の無視は状況に応じて設定
- 検索値を作る:=B2 & \”|\” & C2 のように結合し、検索キーセル(D2)に保存
- VLOOKUPを設定:
- ヘルパー列方式なら、キー列を含む表を範囲にして=VLOOKUP($D$2, $A$2:$E$100, 5, FALSE)
- CHOOSE方式なら、=VLOOKUP($D$2, CHOOSE({1,2}, A列&\”|\”&B列, 目的列), 2, FALSE)
- 動作確認:プルダウンの選択を変えて結果が正しく切り替わるかを確認
入力規則とあわせて「メッセージ」や「エラーアラート」を活用すると、範囲外の値が入ったときに気づけます。許容しない設定にしておけば、誤入力の段階でブロックできます。
ミニQA:別シートのリストを参照するには?
あらかじめ一覧に範囲名を付けておき、データ入力規則の元の値に=範囲名と入力します。直接「別シート!A1:A50」のような参照は指定できないため、範囲名が便利です。
よくある質問(Q&A)
VLOOKUPを実務で使うときによくある疑問をまとめます。ここにない内容は、該当の章に戻って確認するとスムーズです。
- 検索値に空白が混ざっているか判断するには? → LENとLENB、TRIMで確認・除去します。
- 数字に見えるのに一致しないのは? → 文字列として保存されている可能性があります。VALUEで数値化するか、セルの表示形式と取り込み手順を見直します。
- 列を挿入したら結果がずれた → 列番号を固定値で持つ構造の限界です。COLUMN関数で動的に計算するか、XLOOKUPなどへ置き換えます。
- 重複があるとどれが返る? → 最初に見つかった行が返ります。重複を許容するなら、結果の妥当性チェックや集計関数での検算も合わせて行いましょう。
ミニQA:近似一致と完全一致はどちらを使えばいい?
基本は完全一致(FALSE)です。近似一致(TRUE)は、検索列が昇順に整っていて区間検索を行いたいときだけ使います。昇順でないと誤った値を返すため注意が必要です。