概要
「この値は表の何行目にあるのか?」を知りたいときに使うのが MATCH(マッチ)関数です。
MATCH は 検索値が“範囲の中で何番目にあるか”を返す関数で、VLOOKUP や INDEX と組み合わせると強力な検索システムが作れます。
初心者がつまずきやすい「行番号とセルの行番号の違い」も丁寧に解説します。
基本の使い方
書式
=MATCH(検索値, 検索範囲, 検索方法)
- 検索値:探したい値(例:商品コード)
- 検索範囲:探す範囲(縦方向でも横方向でもOK)
- 検索方法:
- 0 … 完全一致(通常はこれを使う)
- 1 / -1 は近似値検索なので初心者はまず 0 を覚えればOK
例(A2:A100 の中で E2 の値が何番目か)
=MATCH(E2, A2:A100, 0)
これで「A2:A100 の中で E2 が上から何番目か」が分かります。
具体例
商品コードが表の何行目にあるか調べる
A列に商品コードが並んでいるとします。
=MATCH(E2, $A$2:$A$100, 0)
結果が「5」なら、A2:A100 の中で 5番目にあるという意味です。
(実際のシートの行番号とは違うので注意)
行番号を INDEX と組み合わせて値を取得
MATCH は「行番号を返す」だけなので、値を取りたいときは INDEX と組み合わせます。
=INDEX($B$2:$B$100, MATCH(E2, $A$2:$A$100, 0))
A列で検索 → B列の対応する値を返す、という VLOOKUP の代替になります。
応用テンプレート
行番号を“実際のシート行番号”に変換する
MATCH の結果は「範囲内の位置」なので、実際の行番号にしたい場合は開始行を足します。
=ROW($A$2) - 1 + MATCH(E2, $A$2:$A$100, 0)
A2 から始まる範囲なら、ROW(A2)=2 なので「+1」されて実際の行番号になります。
横方向(列番号)を取得する
MATCH は横方向にも使えます。
=MATCH("売上", B1:Z1, 0)
B1:Z1 の中で「売上」が何列目かを返します。
複数条件で行番号を取得(上級)
=MATCH(1, (A2:A100=H2) * (B2:B100=I2), 0)
配列式で「A列がH2 かつ B列がI2」の行番号を取得できます。
最後に一致した行番号を取得(下から検索)
=XMATCH(E2, A2:A100, 0, -1)
MATCH ではなく XMATCH を使うと「下から検索」ができます。
よくあるつまずきと対策
MATCH の結果は「範囲内の位置」であって「シートの行番号」ではない
A2:A100 の中で 5番目 → 実際の行番号は 6行目
この違いを理解しておくと混乱しません。
完全一致(0)を必ず使う
検索方法を省略すると近似値になり、誤った行番号が返ることがあります。
=MATCH(E2, A2:A100, 0)
文字列と数値の違いで見つからない
“00123”(文字列)と 123(数値)は別物です。
必要に応じて TEXT や VALUE で揃えましょう。
重複があると「最初の一致」しか返さない
最新データを取りたい場合は XMATCH の検索モード -1 を使うのが安全です。
例題
問題1: A2:A100 の中で、E2 の値が何番目にあるかを F2 に表示してください(完全一致)。
=MATCH(E2, A2:A100, 0)
問題2: A列で検索し、B列の対応する値を INDEX+MATCH で G2 に表示してください。
=INDEX($B$2:$B$100, MATCH(E2, $A$2:$A$100, 0))
問題3: MATCH の結果を“実際の行番号”に変換して H2 に表示してください(範囲は A2:A100)。
=ROW($A$2) - 1 + MATCH(E2, $A$2:$A$100, 0)
問題4: 1行目(B1:Z1)の中で「売上」が何列目かを I2 に表示してください。
=MATCH("売上", B1:Z1, 0)
問題5: A列が H2、B列が I2 に一致する行番号を J2 に表示してください(配列式)。
=MATCH(1, (A2:A100=H2) * (B2:B100=I2), 0)
まとめ
MATCH は「行番号(または列番号)を取得する」ための基礎関数で、
INDEX と組み合わせると VLOOKUP を超える柔軟な検索ができます。
押さえるべきポイントは次の4つ。
- MATCH は「範囲内の位置」を返す
- 完全一致(0)を使うのが基本
- INDEX と組み合わせると強力な検索が作れる
- 実際の行番号に変換したいときは ROW を足す
この型を覚えると、検索・抽出・参照の精度が一気に上がります。
