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

結論(先に答え)

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

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

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

サンプルデータ

ABCD
1番号りんごみかんぶどう
2A01青森県愛媛県山梨県
3A02長野県和歌山県長野県
4A03山形県静岡県静岡県
5A04北海道熊本県大阪府

練習用の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関数で見出し行から「みかん」の列位置を求める図解

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をコピーしました!

この記事を書いた人

コメント

コメントする

目次