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

サンプルデータ
| A | B | C | D | |
|---|---|---|---|---|
| 1 | 番号 | りんご | みかん | ぶどう |
| 2 | A01 | 青森県 | 愛媛県 | 山梨県 |
| 3 | A02 | 長野県 | 和歌山県 | 長野県 |
| 4 | A03 | 山形県 | 静岡県 | 静岡県 |
| 5 | A04 | 北海道 | 熊本県 | 大阪府 |
数式と引数の意味
手順:F2 に VLOOKUP と MATCH の式を入れて Enter
番号「A03」の行と、「みかん」の列が交わるセルの値を取り出します。F2 に次の式を入力して、Enter キーを押します❶。
=VLOOKUP("A03",A1:D5,MATCH("みかん",A1:D1,0) ,FALSE) "A03" 検索値(番号)A1:D5 範囲(表全体)MATCH("みかん",A1:D1,0) 列番号(みかんは何列目か)FALSE 検索方法(完全一致)"A03"A1:D5MATCH("みかん",A1:D1,0)FALSEオレンジに「探す行の値」、青に「表全体」、MATCHの中に「探す見出し」と「見出しの行」を入れます。例:社員番号(H1)の人の、見出し(H2)の列の値
=VLOOKUP(H1,A1:F50,MATCH(H2,A1:F1,0) ,FALSE) - MATCH の見出しの行(A1:D1)は、VLOOKUP の範囲と同じ列(A 列)から始めます。ずれると違う列が返ります。

確認:静岡県は「A03」の行と「みかん」の列が交わるセル

答えは 静岡県 になりました❷。式は、内側の MATCH から順に計算しています。
- MATCHで、見出しの行(A1:D1)から「みかん」が何列目かを調べる
⇒ 3(番号・りんご・みかん の 3 列目) - VLOOKUPで、表の左の列から「A03」を探し、その行の 3 列目を取り出す
⇒ 静岡県
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関数の使い方まとめ

コメント