VLOOKUP関数は、エクセルで特定の値を検索し、その値に対応するデータを返すために使われます。以下は、基本的な使用例です。例えば、次のような商品データがあるとします。
| 商品コード | 商品名 | 価格 |
|---|---|---|
| A001 | リンゴ | 100 |
| A002 | バナナ | 120 |
| A003 | オレンジ | 150 |
商品コード「A002」に対応する「商品名」を取得したい場合、次のようにVLOOKUPを使います。
=VLOOKUP(検索値, 範囲, 列番号, 検索の型)
検索値: 検索したい値 (例: A002)
- 範囲: データが含まれている範囲 (例: A2)
- 列番号: 返したいデータがある列の番号 (例: 商品名は2列目)
- 検索の型: 完全一致の場合はFALSE、近似一致の場合はTRUEを指定します。通常はFALSEを使用します。
=VLOOKUP("A002", A2:C4, 2, FALSE)
この式を使うと、「バナナ」が返されます。
価格を取得する
商品コード「A003」に対応する価格を取得したい場合は、次のようにします。
=VLOOKUP("A003", A2:C4, 3, FALSE)
この式で「150」が返されます。
VLOOKUPは、左端の列を検索対象とし、右側の列からデータを返すので、検索値が範囲の一番左の列にある必要があります。VLOOKUP関数は単純な検索だけでなく、工夫して使うことで様々な応用が可能です。以下に「変わった使用例」と「応用例」を紹介します。
複数の条件で検索するVLOOKUP(補助列の利用)
VLOOKUPは通常1つの検索値しか扱えませんが、複数条件を扱いたい場合、条件を結合して1つの値にしてから検索する方法があります。
例:「A001」かつ「大阪」の価格を取得したい場合
| 商品コード | 地域 | 価格 |
|---|---|---|
| A001 | 東京 | 100 |
| A001 | 大阪 | 110 |
| A002 | 東京 | 120 |
| A002 | 大阪 | 130 |
2つの条件(商品コードと地域)を結合した列を作成し、その列で検索します。
ステップ1:補助列を作成
新しい列に商品コードと地域を結合します。例えばD列に以下の式を入れます。
=A2&B2
| 商品コード | 地域 | 価格 | 補助列 |
|---|---|---|---|
| A001 | 東京 | 100 | A001東京 |
| A001 | 大阪 | 110 | A001大阪 |
| A002 | 東京 | 120 | A002東京 |
| A002 | 大阪 | 130 | A002大阪 |
ステップ2: VLOOKUPで検索結合した値「A001大阪」を検索します。
=VLOOKUP("A001大阪", D2:E5, 2, FALSE)
この式で「110」が返されます。
IF関数と組み合わせた応用
VLOOKUPをIF関数と組み合わせることで、条件に応じた異なる検索を行うことができます。
例:価格が割引中ならセール価格を、割引がない場合は通常価格を返す場合
| 商品コード | 商品名 | 価格 | セール価格 |
|---|---|---|---|
| A001 | リンゴ | 100 | 80 |
| A002 | バナナ | 120 | 100 |
| A003 | オレンジ | 150 | 130 |
=IF(ISBLANK(VLOOKUP("A001", A2:D4, 4, FALSE)), VLOOKUP("A001", A2:C4, 3, FALSE), VLOOKUP("A001", A2:D4, 4, FALSE))
この式では、セール価格が空欄でない場合はセール価格を返し、空欄の場合は通常価格を返します。
列を逆に検索する応用(CHOOSE関数との併用)
VLOOKUPは通常、左側の列で検索し、右側の列からデータを返しますが、CHOOSE関数を使うことで右側の列を検索し、左側のデータを返すことが可能です。
例:商品名から商品コードを逆引きしたい場合
| 商品名 | 商品コード |
|---|---|
| リンゴ | A001 |
| バナナ | A002 |
| オレンジ | A003 |
=VLOOKUP("バナナ", CHOOSE({1,2}, B2:B4, A2:A4), 2, FALSE)
CHOOSE({1,2}, B2:B4, A2:A4)の部分は、範囲を逆にしてVLOOKUPに渡します。これにより、右側の列(B列)で検索し、左側の列(A列)の値を返すことが可能になります。
別シートのデータを検索
VLOOKUPを使って、別のシートのデータを参照することもできます。
例:シート名が「価格表」のシートからデータを検索する場合
=VLOOKUP("A001", '価格表'!A2:C10, 3, FALSE)
この式で、「価格表」シートのA2の範囲から「A001」に対応するデータを取得します。
部分一致のVLOOKUP(ワイルドカードの使用)
完全一致でなくても、部分一致でデータを検索することができます。例えば、部分的な商品コードを使って検索する場合、ワイルドカード(*)を使用します。
例:商品コードが「A」で始まる商品を検索する。
=VLOOKUP("A*", A2:C4, 2, FALSE)
INDEX関数とMATCH関数を組み合わせることで、VLOOKUPよりも柔軟にデータを検索できます。特に、VLOOKUPのように左から右の列だけでなく、任意の列の値を検索できるため、より強力です。
INDEX関数とMATCH関数を使った例
| 商品コード | 商品名 | 価格 |
|---|---|---|
| A001 | リンゴ | 100 |
| A002 | バナナ | 120 |
| A003 | オレンジ | 150 |
商品コード「A002」に対応する「商品名」と「価格」をINDEXとMATCHを使って取得する方法です。
=INDEX(範囲, MATCH(検索値, 検索範囲, 検索の型), 列番号)
商品名を取得する例:=INDEX(B2:B4, MATCH("A002", A2:A4, 0))
この式でMATCH関数は、商品コード「A002」が何行目にあるかを探し、その行番号をINDEX関数に渡して、商品名「バナナ」を取得します。
価格を取得する例:=INDEX(C2:C4, MATCH("A002", A2:A4, 0))
この式では、同様にMATCHで行番号を取得し、INDEXで価格の列から「120」を取得します。
複数列の検索結果を結合して表示
先ほどの「商品名」と「価格」を1つのセルに結合して表示したい場合、以下のように&演算子を使います。
=INDEX(B2:B4, MATCH("A002", A2:A4, 0)) & " - " & INDEX(C2:C4, MATCH("A002", A2:A4, 0))
この式で「バナナ – 120」と表示されます。
VLOOKUPとINDEX+MATCHの違い
- VLOOKUPは左端の列でしか検索できませんが、INDEX + MATCHは任意の列で検索可能です。
- INDEX + MATCHの組み合わせは、データが右から左の順に検索する必要がある場合や、範囲が複雑な場合に便利です。
このように、INDEXとMATCHを使うことで、VLOOKUPの制限を克服し、より柔軟な検索が可能になります。

