VLOOKUP+MATCHでクロス検索する方法|行と列の見出しで縦横に表引き【サンプル付き】

結論(先に答え)

VLOOKUPの列番号(第3引数)にMATCH関数を入れると、行と列の2つの見出しで表を引く「クロス検索」ができます:=VLOOKUP("A03", A1:D5, MATCH("みかん", A1:D1, 0), FALSE) → 「A03」行×「みかん」列の値(静岡県)。

VLOOKUP の基本(書き方・別シート・#N/A を出さない方法・一致しない原因)は、エクセルのVLOOKUPの使い方にまとめています。

VLOOKUPは「縦方向に行を探す」関数なので、どの列を返すかは列番号を数字で指定するのが基本です。しかし「番号A03の、みかんの列」のように列も見出しで指定したいことはよくあります。そこで列番号の部分をMATCH関数に任せると、行と列の両方を見出しで指定できる「クロス検索(縦横検索)」になります。

VLOOKUP関数の列番号にMATCH関数を使ってクロス検索する図解(A03×みかん→静岡県)
目次

サンプルデータ

ABCD
1番号りんごみかんぶどう
2A01青森県愛媛県山梨県
3A02長野県和歌山県長野県
4A03山形県静岡県静岡県
5A04北海道熊本県大阪府
練習用Excelファイル(無料ダウンロード)
この記事の解説で使うExcelデータです。数式と練習データが入っているので、本文の式を同じ表で試せます。
Excelファイル(.xlsx)/登録不要/数式・練習データ入り

数式と引数の意味

手順:F2 に VLOOKUP と MATCH の式を入れて Enter

番号「A03」の行と、「みかん」の列が交わるセルの値を取り出します。F2 に次の式を入力して、Enter キーを押します❶。

F2 に入れる式
=VLOOKUP("A03",A1:D5,MATCH("みかん",A1:D1,0),FALSE)
"A03" 検索値(番号)A1:D5 範囲(表全体)MATCH("みかん",A1:D1,0) 列番号(みかんは何列目か)FALSE 検索方法(完全一致)
ひとことで番号「A03」の行と、「みかん」の列が交わるセルを取り出す
式を分けて読むと(色は画像の枠と同じ)
検索値"A03"
何を探す?
→ 番号「A03」
範囲A1:D5
どの表で探す?
→ 見出しも含めた表全体
列番号MATCH("みかん",A1:D1,0)
何列目を取り出す?
→ 「みかん」の列=3 列目
検索方法FALSE
どう探す?
→ 完全に同じものだけ
自分の表で使うときは
オレンジに「探す行の値」、青に「表全体」、MATCHの中に「探す見出し」と「見出しの行」を入れます。例:社員番号(H1)の人の、見出し(H2)の列の値=VLOOKUP(H1,A1:F50,MATCH(H2,A1:F1,0),FALSE)
  • MATCH の見出しの行(A1:D1)は、VLOOKUP の範囲と同じ列(A 列)から始めます。ずれると違う列が返ります。
エクセルでVLOOKUPとMATCHを組み合わせたクロス検索の式と、検索値・範囲・列番号を色分けした画面
エクセルでVLOOKUPとMATCHを組み合わせたクロス検索の式と、検索値・範囲・列番号を色分けした画面

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

エクセルのVLOOKUPとMATCHで、A03の行とみかんの列が交わる静岡県を取り出したことを色で示した画面
エクセルのVLOOKUPとMATCHで、A03の行とみかんの列が交わる静岡県を取り出したことを色で示した画面

答えは 静岡県 になりました❷。式は、内側の MATCH から順に計算しています。

  1. MATCHで、見出しの行(A1:D1)から「みかん」が何列目かを調べる
    ⇒ 3(番号・りんご・みかん の 3 列目)
  2. VLOOKUPで、表の左の列から「A03」を探し、その行の 3 列目を取り出す
    ⇒ 静岡県

MATCH関数が「列番号」を作る仕組み

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関数の使い方まとめ

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次