【ヒント】
【解答&解説】
- Sheet1に作業列(例:D列)を追加します。
D列に以下の結合式を入力し、下方向へコピーします。=A2&B2
これにより、「東京ノート」「大阪ボールペン」といった結合された文字列が作成されます。 - Sheet2のC2セルに以下のVLOOKUP関数を入力し、フィルハンドルで下方向にコピーします。
=VLOOKUP(A2&B2,Sheet1!$D$2:$D$5,3,FALSE)
A2&B2
: Sheet2の検索条件である「支店名」と「商品名」を結合して、検索値とします。Sheet1!$D$2:$D$5
: Sheet1の作業列(D列)がVLOOKUP関数の検索範囲の左端になるように指定します。この時、取得したい「売上」の列番号は、範囲の左端(D列)から数えて3列目(D→E→Fの3列目)になります。
問題6:INDEX関数とMATCH関数を使ってVLOOKUPの弱点を克服する(応用!)
VLOOKUP関数は検索値が左端にある必要がありましたが、INDEXとMATCHを組み合わせることで、この制約を取り払えます。
【データ】 問題5の販売実績データを使用します。
【目的】 支店名から、商品コード列(B列)にない商品名(A列)を検索して売上を取得する。 例えば、「ノート」から「東京」支店の売上を検索する。
【期待する結果】
検索商品名 | 支店名 | 売上 |
ノート | 東京 | 5000 |
ボールペン | 大阪 | 3000 |

【ヒント】
【解答】 Sheet2のC2セルに以下の関数を入力し、フィルハンドルで下方向にコピーします。
=INDEX(Sheet1!$C$2:$C$5,MATCH(A2,Sheet1!$B$2:$B$5,0),MATCH(B2,Sheet1!$A$2:$A$5,0))
【解説】
INDEX(Sheet1!$C$2:$C$5
: 取得したいデータ(売上)がある範囲を指定します。MATCH(A2,Sheet1!$B$2:$B$5,0)
: A2セル(検索商品名)がSheet1のB列(商品名列)の何番目にあるかを行番号として取得します。MATCH(B2,Sheet1!$A$2:$A$5,0)
: B2セル(支店名)がSheet1のA列(支店名列)の何番目にあるかを列番号として取得します。- この組み合わせにより、VLOOKUPの「検索値が左端」という制約を回避し、より柔軟な検索が可能になります。

問題7:近似一致(点数から評価を判定!)
数値の範囲に応じて評価を判定しましょう。
【データ】
評価基準(Sheet1)
点数 | 評価 |
0 | D |
60 | C |
70 | B |
80 | A |
90 | S |

テスト結果(Sheet2)
名前 | 点数 | 評価 |
佐々木 | 75 | |
井上 | 62 | |
渡辺 | 91 | |
小林 | 55 |

【目的】 Sheet2のC列に、点数に応じた評価をSheet1の基準から表示する。
【ヒント】
【解答】 Sheet2のC2セルに以下の関数を入力し、フィルハンドルで下方向にコピーします。
=VLOOKUP(B2,Sheet1!$A$2:$B$6,2,TRUE)
【解説】
TRUE
: 近似一致で検索します。Sheet1のA列は昇順に並んでいる必要があります。指定した検索値(点数)以下の最大値を探し、その行のデータを返します。

問題8:複数シートをまたいだ検索(IFERRORと組み合わせる!)
複数の支店ごとの商品リストから、商品コードを検索して情報を取得しましょう。もし最初のシートで見つからなければ、次のシートを探すようにします。
【データ】
東京支店商品リスト(Sheet1)
商品コード | 商品名 |
T001 | 東京限定Tシャツ |
T002 | 東京キーホルダー |

大阪支店商品リスト(Sheet2)
商品コード | 商品名 |
O001 | 大阪たこ焼き味おかき |
O002 | 大阪城ミニチュア |

検索リスト(Sheet3)
商品コード | 商品名 |
T002 | |
O001 | |
F001 |
【目的】 Sheet3のB列に、商品コードに対応する商品名を表示する。まずSheet1を探し、見つからなければSheet2を探す。どちらにもなければ「見つかりません」と表示する。
【ヒント】
【解答】 Sheet3のB2セルに以下の関数を入力し、フィルハンドルで下方向にコピーします。
=IFERROR(VLOOKUP(A2,Sheet1!$A$2:$B$3,2,FALSE),IFERROR(VLOOKUP(A2,Sheet2!$A$2:$B$3,2,FALSE),”見つかりません”))
【解説】
- 最初の
VLOOKUP(A2,Sheet1!$A$2:$B$3,2,FALSE)
でSheet1を検索します。 - もしSheet1で見つからずエラーになった場合、外側のIFERROR関数が次の処理に移ります。
IFERROR(VLOOKUP(A2,Sheet2!$A$2:$B$3,2,FALSE),"見つかりません")
で、今度はSheet2を検索します。- Sheet2でも見つからなければ、最終的に「見つかりません」と表示されます。

問題9:ワイルドカード検索(あいまい検索!)
特定の文字を含む文字列を検索したい時にワイルドカードを使用します。
【データ】
商品リスト(Sheet1)
商品名 | 価格 |
赤りんご | 200 |
青りんご | 250 |
みかん | 180 |
グレープフルーツ | 300 |

検索シート(Sheet2)
検索条件 | 価格 |
りんご | |
みかん |

【目的】 Sheet2のB列に、検索条件に対応する価格を表示する。「りんご」のように、特定の文字を含む商品を検索できるようにする。
【ヒント】
【解答】 Sheet2のB2セルに以下の関数を入力し、フィルハンドルで下方向にコピーします。
=VLOOKUP(A2,Sheet1!$A$2:$B$5,2,FALSE)
【解説】
- 検索値にワイルドカード(
*
や?
)が含まれている場合、VLOOKUP関数はそれを認識し、パターンマッチングを行います。 *りんご*
: 「りんご」という文字が前後に任意の文字列があっても一致します。

問題10:日付を検索値にする場合(データ型に注意!)
日付を検索値にする場合は、表示形式だけでなく、実際の値(シリアル値)が一致しているか確認が必要です。
【データ】
売上データ(Sheet1)
日付 | 商品名 | 売上 |
2025/1/1 | ノート | 5000 |
2025/1/5 | ボールペン | 3000 |
2025/1/10 | 消しゴム | 2000 |

検索シート(Sheet2)
日付 | 商品名 | 売上 |
2025/1/5 | ||
2025/1/1 |

【目的】 Sheet2のC列に、日付に対応する売上を表示する。
【ヒント】
【解答】 Sheet2のC2セルに以下の関数を入力し、フィルハンドルで下方向にコピーします。
=VLOOKUP(TEXT(A2,”yyyy/mm/dd”),TEXT(Sheet1!$A$2:$A$4,”yyyy/mm/dd”),2,FALSE)
【解説】
- 日付の形式が異なるとVLOOKUPは一致と判断しない場合があります。
TEXT(A2,"yyyy/mm/dd")
: 検索値を「yyyy/mm/dd」形式の文字列に変換します。TEXT(Sheet1!$A$2:$A$4,"yyyy/mm/dd")
: 検索範囲の日付列も同じ形式の文字列に変換します。- これにより、表示形式の違いによる検索エラーを防ぎ、正しくシリアル値の一致を判断できます。
- ※注意: この方法は、検索範囲が文字列として扱われるため、パフォーマンスに影響が出る場合があります。もし可能であれば、元のデータの形式を統一することが最も確実です。
VLOOKUP関数で陥りやすい落とし穴と回避策(練習問題から学べること)

これらの練習問題を解く中で、以下のようなVLOOKUP関数特有の落とし穴に気づかれたかもしれません。
これらの問題に遭遇したら、焦らずに原因を探し、適切な対処法を試してみてください。
まとめ:練習を重ねてVLOOKUP関数を自分のものに!

VLOOKUP関数の練習問題10選、お疲れ様でした!すべての問題をクリアできた方も、途中でつまずいた方も、この演習を通してVLOOKUP関数への理解がぐっと深まったのではないでしょうか。
Excelの関数は、実際に手を動かして様々なデータで試すことで、本当に「使える」スキルになります。今回学んだ知識と経験を活かして、日々の業務におけるデータ処理を効率化し、あなたのExcelスキルをさらに磨いていきましょう!
これからもExcelに関する役立つ情報をお届けしていきますので、ぜひ参考にしてくださいね。
コメント