VLOOKUPの列番号(第3引数)にMATCH関数を入れると、行と列の2つの見出しで表を引く「クロス検索」ができます:=VLOOKUP("A03", A1:D5, MATCH("みかん", A1:D1, 0), FALSE) → 「A03」行×「みかん」列の値(静岡県)。
VLOOKUPは「縦方向に行を探す」関数なので、どの列を返すかは列番号を数字で指定するのが基本です。しかし「番号A03の、みかんの列」のように列も見出しで指定したいことはよくあります。そこで列番号の部分をMATCH関数に任せると、行と列の両方を見出しで指定できる「クロス検索(縦横検索)」になります。

サンプルデータ
| A | B | C | D | |
|---|---|---|---|---|
| 1 | 番号 | りんご | みかん | ぶどう |
| 2 | A01 | 青森県 | 愛媛県 | 山梨県 |
| 3 | A02 | 長野県 | 和歌山県 | 長野県 |
| 4 | A03 | 山形県 | 静岡県 | 静岡県 |
| 5 | A04 | 北海道 | 熊本県 | 大阪府 |
練習用のExcelファイルはこちらからダウンロードできます:
Excel-vlookup-match-cross-1.xlsx(ダウンロード)
数式と引数の意味
=VLOOKUP("A03", A1:D5, MATCH("みかん", A1:D1, 0), FALSE) → 静岡県
| 引数 | 指定値 | 意味 |
|---|---|---|
| ❶検索値 | “A03” | 範囲の左端列(番号)から探す値 |
| ❷範囲 | A1:D5 | 見出し行を含めた表全体 |
| ❸列番号 | MATCH(“みかん”, A1:D1, 0) | 「みかん」が見出し行の何列目かを自動計算(=3) |
| ❹検索方法 | FALSE | 完全一致で検索 |
MATCH関数が「列番号」を作る仕組み

MATCH("みかん", A1:D1, 0) は、見出し行 A1:D1 の中で「みかん」が左から何番目かを返します。A1=番号、B1=りんご、C1=みかん…なので結果は 3。第3引数の 0 は「完全一致」の指定です。
この「3」がそのままVLOOKUPの列番号になるため、数式全体は =VLOOKUP("A03", A1:D5, 3, FALSE) と同じ意味になります。
ポイント:範囲の開始列をそろえる
VLOOKUPの範囲(A1:D5)とMATCHの検索範囲(A1:D1)は、同じ列(A列)から始めてください。MATCHが返すのは「検索範囲の中での位置」なので、開始列がずれると列番号もずれて、別の列の値が返ってしまいます。
応用:検索値をセル参照にして切り替える
実務では検索値を直接書かず、セルで切り替えられるようにすると便利です。例えばH1に番号、H2に果物名を入力しておけば、次の数式で好きな組み合わせを引けます。
=VLOOKUP(H1, A1:D5, MATCH(H2, A1:D1, 0), FALSE)
Microsoft 365なら =XLOOKUP(H1, A2:A5, XLOOKUP(H2, B1:D1, B2:D5)) やINDEX+MATCHでも同じことができます。
まとめ
| やりたいこと | 数式 |
|---|---|
| 行×列の見出しで値を取得 | =VLOOKUP(行の値, 表全体, MATCH(列の見出し, 見出し行, 0), FALSE) |
| 列の位置だけ知りたい | =MATCH(見出し, 見出し行, 0) |
| XLOOKUPで同じことをする | =XLOOKUP(行の値, 行見出し, XLOOKUP(列見出し, 列見出し行, データ範囲)) |
▶ こんな場合はこちら:クロス抽出(XLOOKUP・INDEX+MATCH)/VLOOKUP関数の使い方まとめ

コメント