VLOOKUP関数は「商品コードから商品名や価格を自動で取得する」といった場面で欠かせない関数です。本記事では、実際のExcel画面をもとに、構文の意味・よくあるエラーの対処法・実務での活用パターンを初心者にもわかりやすく解説します。
VLOOKUPとは何か
VLOOKUP(ブイルックアップ)は、指定した値をもとに表の中から該当するデータを検索し、対応する列の値を返す関数です。Vは「Vertical(垂直)」の略で、表を縦方向に検索します。
たとえば、商品コード「A003」を入力すると、商品マスター表から自動的に「キーボード」「5,800円」といった情報を取得できます。手動でコピーする必要がなくなるため、入力ミスの防止や作業時間の大幅な短縮につながります。
Excelを日常業務で使っている方であれば、こんな場面を経験したことがあるのではないでしょうか。受注リストに商品コードだけ入力して、商品名や単価はそのたびに別の表を見ながら手入力している——あるいは、社員番号の一覧があるけれど、そこに部署名や氏名を手作業でコピーしている。VLOOKUPを使えば、こうした「別の表から情報を引っ張ってくる」作業のほとんどを自動化できます。
- 発注書と商品マスターの連携 — 商品コードを入力するだけで商品名・単価・仕入先が自動反映。毎回マスター表を参照する手間がゼロになる
- 社員番号から部署・氏名を表示 — 勤怠管理や給与計算の表に社員番号を入力すれば、氏名・部署・役職が自動で埋まる
- 受注データと商品マスターの紐づけ — 受注番号や商品コードをキーに、マスター表の情報を一括で引いてこられる
- 請求書や見積書への単価自動反映 — 商品リストから単価を手入力する必要がなくなり、転記ミスが防げる
- 顧客コードから顧客情報を取得 — 顧客マスターと明細表を連携させ、住所・担当者名・与信限度額などを自動表示する
- 科目コードから勘定科目名を表示 — 経理で使う仕訳入力シートに科目コードを打てば、科目名称が自動で出てくる
共通しているのは、「コードや番号などのキー情報はある、でもそのキーに紐づく詳細情報はどこか別の表にある」という構図です。VLOOKUPはこの「2つの表を橋渡しする」役割を担います。これをマスターすると、これまで手作業でやっていたコピー&ペーストや目視確認の工程が大幅に減り、ミスのリスクも下がります。
VLOOKUPを知る前は、商品コードが変わるたびに別シートを開いて目で探し、商品名をコピーして貼り付け……という作業を繰り返していた方も多いでしょう。100行のデータを処理するなら100回その作業が必要です。VLOOKUPなら1行目に数式を書いて、残りの99行にコピーするだけで済みます。
VLOOKUP関数の構文と引数
VLOOKUPは4つの引数で構成されています。それぞれの役割を正しく理解することが、ミスなく使いこなすための第一歩です。

| 引数 | 説明 | 入力例 |
|---|---|---|
| 検索値 | 探したい値。セル参照で指定するのが一般的 | E2 |
| 範囲 | 検索対象のデータ範囲。検索値は必ず左端列に配置 | $A$1:$C$100 |
| 列番号 | 取得したい列の番号(範囲の左端を1として数える) | 2(商品名)/ 3(単価) |
| 検索方法 | FALSE=完全一致、TRUE=近似一致 | FALSE(推奨) |
範囲は絶対参照($)で固定するのが鉄則
初心者がVLOOKUPを使い始めて最初につまずくポイントの一つが、範囲の絶対参照です。数式を複数行にコピーするときに、範囲がずれてしまって正しい値が取れなくなる——このトラブルは、絶対参照を知らないと必ず起きます。
たとえば、C2セルに =VLOOKUP(B2, A1:C100, 2, FALSE) と書いてC3にコピーすると、数式は自動的に =VLOOKUP(B3, A2:C101, 2, FALSE) に変わります。参照する範囲がA2:C101にずれてしまい、マスター表の先頭行(ヘッダー)が範囲から外れたり、末尾のデータが欠けたりして、正しく検索できなくなります。
これを防ぐには、範囲を指定するときに$マークをつけて固定します。
=VLOOKUP(B2, $A$1:$C$100, 2, FALSE)
$A$1:$C$100 と書くと、何行にコピーしても範囲は常にA1:C100のまま固定されます。セルを選択してF4キーを押すと自動で$がつくので、手入力する必要はありません。
検索値(B2)は行ごとにずれてほしいので、絶対参照にする必要はありません。固定したいのは「マスター表の範囲」だけです。この使い分けを意識すると、コピー時のトラブルがほぼなくなります。
「1行目は正しく表示されるのに、2行目以降がおかしい」「途中の行だけ#N/Aエラーになる」という症状は、範囲がコピーとともにずれているサインです。数式バーをクリックして範囲部分を確認し、$がついていなければF4キーで絶対参照に変えてください。これだけで解決することが多いです。
検索方法を省略するとTRUE(近似一致)になり、意図しない値が返されることがあります。商品コードや社員番号など、完全に一致する値を探したい場合は必ずFALSEを指定しましょう。
基本的な使い方(商品マスター検索)
ここでは、商品マスター表から商品コード「A003」に対応する商品名と単価を取得する例で、VLOOKUPの基本操作を確認します。実際にExcelで操作しながら読むと理解が深まります。

ステップ1 — 商品マスター表を用意する
まず、参照元となる商品マスター表を用意します。A列に商品コード、B列に商品名、C列に単価を入力した表を想定します。
| A列 商品コード | B列 商品名 | C列 単価 |
|---|---|---|
| A001 | マウス | 1,200 |
| A002 | モニター | 32,000 |
| A003 | キーボード | 5,800 |
| A004 | USBハブ | 2,500 |
| A005 | Webカメラ | 8,900 |
VLOOKUPで検索する場合、検索キー(この例では商品コード)は必ず表の一番左の列に配置します。これは仕様上の制約であり、左端以外の列をキーとして使うことはできません(その場合はINDEX+MATCH関数やXLOOKUPを使います)。
ステップ2 — 検索する値を用意する
別の場所(たとえばE2セル)に、検索したい商品コード「A003」を入力します。この値がVLOOKUPの「検索値」になります。
ステップ3 — 商品名を取得する数式を入力する
F2セルに以下の数式を入力します。
=VLOOKUP(E2, $A$1:$C$6, 2, FALSE)
E2(検索値: A003)を、$A$1:$C$6の範囲の左端列(A列)から探し、見つかった行の2列目(B列 商品名)を返します。結果は「キーボード」です。
ステップ4 — 単価を取得する数式を入力する
列番号を2から3に変えるだけで、同じ検索値から単価を取得できます。
=VLOOKUP(E2, $A$1:$C$6, 3, FALSE)
列番号を3にすると、3列目のC列(単価)から5,800が返されます。範囲の左端を「1」として数えるので、A列=1、B列=2、C列=3です。
列番号は「指定した範囲の左端から何列目か」で数えます。$A$1:$C$6という範囲なら、A列=1列目、B列=2列目、C列=3列目です。シート全体のA列・B列・C列という意味ではなく、あくまで「指定した範囲の中での位置」です。たとえば範囲を$D$1:$F$6と指定すれば、D列=1、E列=2、F列=3になります。
ステップ5 — 数式を他の行にコピーする
数式が入ったセルを選択し、セルの右下角にある小さな緑の四角(フィルハンドル)をドラッグして下方向にコピーします。絶対参照($)で範囲を固定しているので、どの行にコピーしても常に同じマスター表を参照します。コピー後に全行の値が正しく表示されることを確認してください。
別シートのデータを参照する方法
実務では、商品マスターや顧客マスターなどを別シートに置いておくケースが多いでしょう。「Sheet1で受注入力、Sheet2でマスター管理」という使い分けです。別シートのデータをVLOOKUPで参照するのは難しくありません。範囲の指定方法が少し変わるだけです。
シート名を指定した範囲の書き方
別シートのデータを参照する場合、範囲の前に シート名! をつけます。
=VLOOKUP(B2, マスター!$A:$C, 2, FALSE)
「マスター」という名前のシートのA〜C列全体を参照します。シート名の直後に ! をつけるのがルールです。
この例では範囲を マスター!$A:$C と列全体で指定しています。行番号を指定せずに列だけで範囲を指定するとデータが増えても範囲を更新する必要がありません。商品マスターを随時追加している場合は、この書き方のほうが管理が楽になります。
シート名に空白やカッコなど特殊な文字が入っている場合は、シート名をシングルクォーテーションで囲みます。たとえばシート名が「商品 マスター」なら、‘商品 マスター’!$A:$C のように書きます。数式を直接入力するよりも、別シートのセルをマウスでクリックして選択すると自動的に正しい形式で入力されるので、手入力より確実です。
別シート参照時の絶対参照について
別シートを参照する場合も、絶対参照($)を忘れずにつけましょう。マスター!A:C よりも マスター!$A:$C と書いておくほうが、数式をコピーしたときに範囲がずれる心配がありません。特に複数行に数式をコピーする場合は必須です。
- マスターデータが入力シートと混在しないので表が見やすくなる
- マスターを別シートで一元管理すれば、価格改定や人事異動の際にマスターだけ更新すれば全ての入力シートに反映される
- 誰かが誤ってマスターデータを書き換えるリスクを、シートの保護機能と組み合わせて防ぎやすくなる
よくあるエラーと対処法
VLOOKUPを使っていると、思いどおりの結果が返らないことがあります。代表的なエラーとその原因・対処法を押さえておきましょう。

| エラー | 原因 | 対処法 |
|---|---|---|
| #N/A | 検索値が見つからない | 検索値のスペース・全角半角を確認する |
| #REF! | 列番号が範囲を超えている | 列番号を範囲内の数値に修正する |
| #VALUE! | 引数の型が違っている | 列番号が数値になっているか確認する |
| 間違った値 | 検索方法がTRUE(近似一致)になっている | FALSEに変更する |
#N/Aエラーの原因の8割はこれ
VLOOKUPのエラーで断然多いのが #N/A です。「値が見つからない」というエラーですが、実際には値が存在しているのにエラーが出るケースがほとんどです。その原因の大半は、目に見えない空白文字か全角・半角の混在です。
たとえば、検索値のセルに「A003」と入力されているように見えても、実際には「A003 」(末尾にスペース)や「A003」(全角文字)が入っているケースがあります。人間の目には同じに見えても、Excelは厳密に区別するため、一致しないと判断して#N/Aになります。
エラーになっている行の検索値セルをクリックし、数式バーで実際の値を確認します。末尾に余分なスペースがないか、全角・半角が統一されているかをチェックします。
スペースが原因の場合は TRIM関数 で除去できます。
=VLOOKUP(TRIM(B2), $A$1:$C$100, 2, FALSE)
全角・半角が混在している場合は ASC関数 で半角に統一できます。
=VLOOKUP(ASC(B2), $A$1:$C$100, 2, FALSE)
両方を組み合わせる場合は =VLOOKUP(TRIM(ASC(B2)), …) のように入れ子にします。
また、マスター表側のデータにスペースや全角が混じっていることもあります。その場合は検索値だけ修正してもエラーが解消しないので、マスターデータの整備も必要です。Excelの「検索と置換」機能(Ctrl+H)で全角スペースを空文字に置換するか、マスター列にもTRIM・ASCを適用したヘルパー列を作るとよいでしょう。
Excelでは、セルに「東京都」と見えていても実際は「東京都 」(末尾に全角スペース)だったり、「A001」と見えていても「A001」(全角)だったりすることがよくあります。別のシステムやツールからコピーしたデータは特にこの問題が起きやすいです。VLOOKUPがうまく動かないときは、まずデータのクリーニングを疑いましょう。
IFERRORと組み合わせてエラーを回避する
VLOOKUPで検索値が見つからないと#N/Aエラーが表示されます。実務の帳票やレポートでエラー表示があると見栄えが悪くなるため、IFERROR関数で囲んでおくのが定石です。

=IFERROR(VLOOKUP(E2, $A$1:$C$6, 2, FALSE), “該当なし”)
VLOOKUPの結果がエラーの場合、「該当なし」と表示します。エラーでなければ通常の検索結果を返します。
エラー時の表示を状況に合わせて変える
IFERRORの第2引数(エラーのときに返す値)は、用途に応じて使い分けると表がより実用的になります。
| 書き方 | エラー時の表示 | 向いている場面 |
|---|---|---|
| =IFERROR(VLOOKUP(…), “該当なし”) | 「該当なし」と表示 | 上司や取引先に見せる帳票。データが存在しないことを明示したい |
| =IFERROR(VLOOKUP(…), “”) | 空白(何も表示しない) | まだ商品コードが入力されていない行が多い表。見た目をすっきりさせたい |
| =IFERROR(VLOOKUP(…), 0) | 0を表示 | 金額や数量の列。後続のSUM関数やAVERAGE関数でエラーが伝播しないようにしたい |
| =IFERROR(VLOOKUP(…), “未登録”) | 「未登録」と表示 | マスターに登録されていない新規商品や顧客を見分けたい場面 |
特に金額や数量を扱う列では、エラーのままだとSUM関数が正しく機能しなくなることがあります。合計を出す列があるなら、IFERROR で 0 を返しておくのが安全です。一方、「空白にしておきたい」なら “” を使いますが、AVERAGE関数などではゼロとして扱われる点に注意が必要です。
- エラー表示を防ぎ、帳票の見栄えを整えられる
- 「該当なし」「未登録」など、状況に合ったメッセージを自由に設定できる
- 後続の計算(SUM、AVERAGEなど)がエラーで止まるのを防げる
- 検索値がまだ入力されていない空行でのエラーを非表示にできる
実務で使う受注管理の例
ここでは、受注管理表で商品コードから商品名・単価を自動取得し、金額を計算する実務的な例を紹介します。実際の業務に近いシナリオで、VLOOKUP の威力を体感してください。

シナリオ — 受注入力の自動化
あなたは営業事務担当で、毎日20〜30件の受注データを入力しています。受注のたびに商品マスターを別タブで開いて商品名と単価を確認し、手入力しているとミスも多く時間もかかります。このシナリオをVLOOKUPで改善します。
「マスター」シートにはA列に商品コード、B列に商品名、C列に単価が入っています。「受注」シートには日々の受注データを入力していきます。
受注管理表の列構成と数式
| 列 | 内容 | 入力方法 |
|---|---|---|
| A列 受注日 | 受注した日付 | 手入力 |
| B列 商品コード | 検索キーとなるコード | 手入力 |
| C列 商品名 | VLOOKUPで自動取得 | =IFERROR(VLOOKUP(B2, マスター!$A:$C, 2, FALSE), “未登録”) |
| D列 数量 | 受注数量 | 手入力 |
| E列 単価 | VLOOKUPで自動取得 | =IFERROR(VLOOKUP(B2, マスター!$A:$C, 3, FALSE), 0) |
| F列 金額 | 数量×単価の計算結果 | =D2*E2 |
この構成で実現できること
受注シートには「受注日」「商品コード」「数量」の3項目を手入力するだけで、商品名・単価・金額の3項目が自動で埋まります。これまで6列すべて手入力していたなら、入力作業が半分に減ります。
商品名のVLOOKUPにはエラー時に「未登録」を返す設定にしています。新商品がマスターにまだ登録されていない場合に、「未登録」という表示を見て気づくことができます。単価は計算に使うため、エラー時は0を返します(0のままだと金額も0になるので、後で確認・修正しやすくなります)。
この仕組みを応用すれば、発注書・見積書・請求書など、コードや番号をキーにして情報を引っ張ってくる帳票なら何にでも使えます。また、マスターシートの情報を更新すれば(例えば単価改定)、それを参照している全ての受注データが自動的に最新単価で再計算されます。
VLOOKUP活用のポイントまとめ
- 検索値は範囲の左端列に配置する — VLOOKUPは左端列しか検索できません。設計段階でキーとなる列を左端に置く習慣をつけましょう
- 範囲は絶対参照($)で固定する — 数式を下方向にコピーするとき、範囲がずれないようにするために必須です。F4キーで素早く切り替えられます
- 検索方法は必ずFALSEを指定する — 省略するとTRUE(近似一致)になり、意図しない結果になることがあります。コードや番号の検索では常にFALSEです
- IFERRORで囲む習慣をつける — エラー表示を防ぎ、帳票の品質を保てます。エラー時に何を表示するかは用途に応じて使い分けましょう
- #N/Aエラーはまずスペース・全角半角を疑う — 値が存在するのにエラーが出るときは、TRIM関数やASC関数で文字を整えると解決することが多いです
次のステップ — XLOOKUP への移行
VLOOKUPの基本を押さえたら、Excel 2021以降で使えるXLOOKUP関数も視野に入れてみてください。XLOOKUPはVLOOKUPの後継にあたる関数で、いくつかの改善点があります。
| 機能 | VLOOKUP | XLOOKUP |
|---|---|---|
| 検索方向 | 右方向のみ(左端列がキー) | 左右どちらも可 |
| エラー時の処理 | IFERRORを別途組み合わせる必要あり | 引数内でエラー時の値を指定できる |
| 列追加の影響 | 列番号が変わると数式を修正する必要あり | 取得列を直接範囲で指定するため影響なし |
| 対応バージョン | 全バージョン | Excel 2021以降、Microsoft 365 |
ただし、VLOOKUPは古いバージョンのExcelでも動作するため、取引先や社内の環境によっては引き続き使い続ける価値があります。まずVLOOKUPをしっかりマスターした上で、環境が整ったタイミングでXLOOKUPに移行するのが現実的なステップです。
VLOOKUPの次は、複数条件での検索が必要になることがあります。その場合はINDEX関数とMATCH関数を組み合わせる方法が定番です。また、VLOOKUPを大量に使うとファイルが重くなることがあります。その場合は一度VLOOKUPで値を取得した後、「値として貼り付け」で数式を文字に変換する方法も覚えておくと便利です。
「VLOOKUPは使えるようになったけど、もっと業務全体を効率化したい」——そんなお悩みはありませんか?
はてなベースでは、Excel研修からデータ基盤の整備、業務フロー全体のDX推進まで、御社の課題に合わせたサポートを提供しています。