
VLOOKUP関数って何だか難しそう

IF関数は使えるけどVLOOKUPはさっぱり…

こんな風に感じていませんか?
この記事では、ExcelのVLOOKUP関数について、
「そもそもVLOOKUP関数って何?」という基本から、
「どんな時に使うの?」
「どうやって使うの?」といった具体的な使い方、
さらには
「よくあるエラーの原因と対処法」まで、
画像や具体例をたっぷり使って徹底的に解説します。
この記事を読めば、VLOOKUP関数をマスターして、日々のデータ検索や集計作業を効率化できるようになりますよ!
VLOOKUP関数ってどんな時に役立つの?
Excelで仕事をしているとこんな場面に遭遇したことはありませんか?

このリストから、あの情報を見つけてきたい!

複数のシートに散らばったデータをまとめて集計したい!
そんな時、一つ一つ手作業でデータを探していては、時間もかかるしミスも起こりやすくなります。
例えば、以下のようなケースでVLOOKUP関数が大活躍します。

VLOOKUP関数は、
このように特定のキーワード(検索値)をもとに、別の表から関連するデータを探して表示することができる、とても便利な関数なんです。
VLOOKUP関数の基本を理解しよう
まずは、VLOOKUP関数の基本的な考え方と、その構文(書き方)を見ていきましょう。
VLOOKUP関数とは?
VLOOKUPの「V」は「Vertical(垂直)」、「LOOKUP」は「探す」という意味です。
つまり、「縦方向にデータを探し、目的の情報を引っ張ってくる関数」ということになります。
指定した検索値を、表の一番左の列から探し、見つかった行の指定した列にあるデータを返します。
VLOOKUP関数の構文
VLOOKUP関数は、以下の4つの引数(ひきすう)を使って設定します。
=VLOOKUP(検索値, 範囲, 列番号, 検索方法)
それぞれの引数が何を意味するのか、詳しく見ていきましょう。
引数の種類 | 説明 |
検索値 (lookup_value) | 検索したい値、または検索値が入力されているセルを指定します。この値を基に、範囲の中から目的のデータを探します。 |
範囲 (table_array) | 検索の対象となる表全体、またはその範囲を指定します。検索値が入力されている列が、この範囲の一番左の列にある必要があります。 |
列番号 (col_index_num) | 範囲の左端から数えて、何番目の列に目的のデータが入っているかを指定します。例えば、範囲の3列目の値を取得したい場合は「3」と入力します。 |
検索方法 (range_lookup) | 検索値と完全に一致するデータを検索するか(FALSE/0)、近似値を検索するか(TRUE/1)を指定します。基本的には「FALSE」または「0」を指定して完全一致を検索します。 |
💡ポイント
検索方法は「TRUE」と「FALSE」がありますが、ほとんどの場合、完全一致を意味する「FALSE」または「0」を使います。間違えて「TRUE」を使ってしまうと、意図しない値が返されることがあるので注意しましょう。
VLOOKUP関数を使ってみよう!実践的な使い方
ここからは、具体的なデータを使ってVLOOKUP関数の使い方を練習してみましょう。
商品コードから商品名を検索する
まず、以下のような商品リストと、商品コードから商品名を検索したいシートがあるとします。
商品リスト(Sheet1):

商品コード | 商品名 | 単価 |
P001 | ノート | 150 |
P002 | ボールペン | 100 |
P003 | 消しゴム | 80 |
P004 | ファイル | 300 |
P005 | 付箋 | 120 |
検索シート(Sheet2):

商品コード | 商品名 |
P003 | |
P001 | |
P005 |
Sheet2のB列に、Sheet1の商品コードに対応する商品名を自動で表示させたい場合を考えてみましょう。
- 検索値を指定する(A2セル) 今回は「P003」の商品名を検索したいので、検索値はSheet2のA2セル(
A2
)を指定します。 - 範囲を指定する(Sheet1!A2:C6) 検索対象となる商品リストの範囲は、Sheet1のA2セルからC6セルまでです。関数をコピーしても範囲がずれないように、絶対参照($)を使って
Sheet1!$A$2:$C$6
と指定しましょう。
💡ポイント:
範囲の指定では、必ず検索値がある列(今回の場合は商品コードの列)が一番左端になるように選択してください。
- 列番号を指定する(2) 商品名が欲しいので、指定した範囲(A列〜C列)の中で「商品名」が何列目にあるか数えます。A列が1列目、B列が2列目なので、「2」を指定します。
- 検索方法を指定する(FALSEまたは0) 完全に一致する商品コードを探したいので、「FALSE」または「0」を指定します。
これらの情報を組み合わせて、B2セルに入力するVLOOKUP関数は以下のようになります。
=VLOOKUP(A2,Sheet1!$A$2:$C$6,2,FALSE)
この関数を入力してEnterキーを押すと、B2セルに「消しゴム」と表示されるはずです。
あとは、B2セルのフィルハンドルを下にドラッグすれば、残りの商品コードに対応する商品名も自動で表示されます。
結果の検索シート(Sheet2):

別のシートやブックからデータを取得する
VLOOKUP関数は、同じシート内だけでなく、別のシートや別のExcelブックからもデータを取得できます。
別のシートから取得する場合:
先ほどの例のように、範囲指定の際にシート名を含めるだけでOKです。
=VLOOKUP(A2,Sheet1!$A$2:$C$6,2,FALSE)
別のブックから取得する場合:
別のブックから取得する場合は、ファイル名とシート名を指定します。
例:
=VLOOKUP(A2,'[商品データ.xlsx]Sheet1'!$A$2:$C$6,2,FALSE)
この際、対象のExcelブックが開いている必要があります。
閉じている場合はエラーになるか、パスを含めた長い参照が表示されます。
VLOOKUP関数を使う上での注意点
VLOOKUP関数は便利ですが、いくつか知っておくべき注意点があります。
検索値は範囲の左端の列にあること
VLOOKUP関数は、
指定した「範囲」の一番左の列から検索値を探します。
もし検索値が範囲の左端にない場合、正しくデータを取得できません。
NG例:

上記の表で「商品コード」を検索値にして「商品名」を探そうとしても、商品コードが左端ではないためエラーになります。
対処法1:データの並び順を変更して、検索値を一番左の列に移動する。
対処法2:INDEX関数とMATCH関数を組み合わせる(後述)。
大文字・小文字、半角・全角の違いに注意
VLOOKUP関数は、大文字・小文字、半角・全角を区別して検索します。
例えば「excel」と「Excel」はVLOOKUP関数にとっては別の値として扱われます。
例:
ID | 名前 |
abc001 | 山田 |
Abc001 | 鈴木 |
この場合、「abc001」で検索しても「Abc001」のデータは取得できません。
こういった際は下記の対処法を試して見てください!
対処法1:検索するデータと検索されるデータの表記を統一する。
対処法2:TRIM関数などで余分なスペースを削除する。
対処法3:CLEAN関数などで印刷できない文字を削除する。
複数の同じ検索値がある場合
検索値が範囲内に複数存在する場合、VLOOKUP関数は
最初にヒットした(一番上にある)行のデータを返します。
例:

この場合、「101」で検索すると、2行目の「りんご」が返され、4行目の「ばなな」は返されません。
対処法1:重複しない一意の検索値を使用する。
対処法2:別の関数(例:SUMIF関数、COUNTIF関数)やピボットテーブルを検討する。
列の挿入・削除に注意
VLOOKUP関数で指定する「列番号」は、手動で番号を指定しているため、後から元の表に列を挿入したり削除したりすると、参照する列がずれてしまい、間違った値が返されることがあります。
例:元の表

VLOOKUP関数で商品名を検索する場合、列番号は「2」を指定。

商品コードと商品名の間に新しい列を挿入した場合:

元の関数では列番号が「2」のままだと、「発売日」のデータが返されてしまいます。

対処法1:列番号を手動で修正する。
対処法2:MATCH関数と組み合わせることで、列番号を自動で取得できるようにする(後述)。
VLOOKUP関数でよくあるエラーと対処法
VLOOKUP関数を使っていると、###N/A! や ###REF! といったエラーに遭遇することがあります。それぞれの意味と対処法を知っておきましょう。
#N/A! エラー
「#N/A!」は、「Not Available(利用できません)」の略で、検索値が見つからなかった場合に表示されるエラーです。
例:存在しない商品コードを検索した場合

主な原因と対処法:
- 検索値が範囲内に存在しない: 入力ミスがないか確認し、正しい検索値を入力する。
- 検索値と範囲のデータ型が異なる: 片方が数値で、もう片方が文字列になっている場合など。TEXT関数やVALUE関数などでデータ型を変換してみる。
- 余分なスペースや見えない文字が含まれている: TRIM関数で前後のスペースを削除したり、CLEAN関数で制御文字を削除したりする。
- 検索方法をTRUEにしている: 完全一致を検索したい場合は「FALSE」または「0」にする。
#REF! エラー
「#REF!」は、「Reference Error(参照エラー)」の略で、参照先が無効になっている場合に表示されるエラーです。

例:列番号を範囲外で指定した場合
=VLOOKUP(A2,Sheet1!$A$2:$C$6,5,FALSE)
(範囲は3列なのに列番号を5と指定)
主な原因と対処法:
- 列番号が範囲の列数を超えている: 範囲の列数を確認し、正しい列番号を指定する。
- 参照先のシートやセルが削除された: 削除された参照がないか確認し、参照を修正する。
エラー表示させたくない場合の対処法:IFERROR関数
エラーが表示されると見栄えが悪い、という場合は、IFERROR関数を使ってエラー時に表示する内容を指定できます。
=IFERROR(VLOOKUP(検索値, 範囲, 列番号, 検索方法),"見つかりません")
例:

このように記述すると、
検索値が見つからなかった場合に「#N/A!」の代わりに「見つかりません」と表示されます。
VLOOKUP関数の応用!さらに便利に使うテクニック
VLOOKUP関数だけでも十分便利ですが、他の関数と組み合わせることで、さらに強力になります。
MATCH関数と組み合わせて列番号を自動化する
先ほど、VLOOKUP関数は列を挿入・削除すると列番号がずれてしまうという話をしました。
これを解決してくれるのが、MATCH関数です。MATCH関数は、指定した値が範囲の何番目にあるかを返してくれる関数です。
=VLOOKUP(検索値, 範囲, MATCH(検索したい見出し,見出しの範囲,0), FALSE)
例:
Sheet1(商品リスト):

Sheet2(検索シート):
商品コード | 検索したい項目 | 結果 |
P001 | 商品名 |
Sheet2のC2セルに、商品コード「P001」の商品名を検索したいとします。C2セルには以下のように入力します。
=VLOOKUP(A2,Sheet1!$A$2:$C$6,MATCH(B2,Sheet1!$A$1:$C$1,0),FALSE)

この式では、MATCH(B2,Sheet1!$A$1:$C$1,0)
の部分で、Sheet1の1行目にある見出しの中からB2セルに入力された「商品名」が何番目にあるか(この場合は2番目)を自動で取得してくれます。こうすることで、後からSheet1に列が追加されても、自動的に正しい列番号を参照してくれるようになります。
INDEX関数とMATCH関数
VLOOKUP関数は検索値が左端の列にある必要がありましたが、INDEX関数とMATCH関数を組み合わせると、この制約を取り払うことができます。
より複雑な検索や、柔軟なデータ抽出を行いたい場合に非常に役立ちます。
=INDEX(取得したいデータの範囲, MATCH(検索値, 検索値がある列の範囲, 0), MATCH(検索したい見出し, 見出しがある行の範囲, 0))
商品名から商品コードを検索してみましょう!
Sheet1(商品リスト):

Sheet2(検索シート):

Sheet2のB2セルに、商品名「ノート」に対応する商品コードを検索したいとします。
VLOOKUP関数では商品名が左端ではないので使えませんが、INDEXとMATCHを組み合わせれば可能です。
=INDEX(Sheet1!$A$2:$C$6,MATCH(A2,Sheet1!$B$2:$B$6,0),MATCH(B1,Sheet1!$A$1:$C$1,0))
この式では、まず MATCH(A2,Sheet1!$B$2:$B$6,0)
でA2セルの「ノート」がSheet1のB列の何行目にあるかを取得し、次に MATCH(B1,Sheet1!$A$1:$C$1,0)
でB1セルの「商品コード」がSheet1の1行目の見出しの何列目にあるかを取得します。
そして、INDEX関数でその行と列が交差するセルの値を取得します。

少し複雑に感じるかもしれませんが、VLOOKUP関数の限界を感じた時に、ぜひ思い出してみてください。
まとめ:VLOOKUP関数を使いこなして仕事効率UP!
いかがでしたでしょうか?
VLOOKUP関数は、Excelのデータ処理において非常に強力なツールです。
最初は難しく感じるかもしれませんが、実際に手を動かして練習することで、きっと使いこなせるようになります。
この記事で学んだことを活かして、日々の業務にVLOOKUP関数を取り入れてみてください。もう手作業でデータを探す必要はありません!VLOOKUP関数をマスターして、あなたのExcelスキルをワンランクアップさせましょう!
コメント