概要
「この値と“完全に同じ”ものが、どこにあるか知りたい」
そんなときに使うのが MATCH関数 + 検索方法 0(ゼロ) です。
MATCH(検索値, 検索範囲, 0) と書くことで、
「検索範囲の中から、検索値と完全一致するセルを探して、その“位置(何番目か)”を返す」ことができます。
VLOOKUP などと組み合わせる前に、この“完全一致検索の基本”をしっかり押さえておくと応用が効きます。
MATCH(0) の基本
書式と意味
=MATCH(検索値, 検索範囲, 0)
ここで大事なのが、最後の「0」です。
この 0 が「完全一致で探してね」という指定になっています。
たとえば、
=MATCH("A001", A2:A100, 0)
なら、
- A2:A100 の中から “A001” と完全に同じセルを探す
- 見つかったら「範囲の中で上から何番目か」を数値で返す
(例:A2:A100の中で3番目なら「3」と返る)
という動きになります。
具体例(縦方向の完全一致)
商品コードが何番目にあるかを調べる
A列に商品コード一覧があるとします。
A2:A6
A001
A002
A003
A004
A005
E2 に “A003” が入っているとして、その位置を調べる式はこうです。
=MATCH(E2, A2:A6, 0)
結果は「3」になります。
理由は、A2:A6 の中で
- A2 … 1番目
- A3 … 2番目
- A4 … 3番目(ここが “A003″)
だからです。
ここで返されているのは「シートの行番号」ではなく
「範囲内で何番目か」という“位置”である点が重要です。
横方向の完全一致(列番号取得)
MATCH は横方向にも使えます。
1行目に項目名(見出し)が並んでいる表を考えましょう。
1行目
A1:日付 / B1:担当者 / C1:商品 / D1:数量 / E1:売上
この中で「“商品” が何番目の列か」を知りたいときは、こう書きます。
=MATCH("商品", A1:E1, 0)
結果は「3」になります。
A1:E1 の中で
- A1 → 1番目
- B1 → 2番目
- C1 → 3番目(”商品”)
だからです。
この「完全一致で列番号を取る」技は、INDEX関数と組み合わせると、
「見出し名がどの列にあっても追従する式」を作るときに非常に役立ちます。
MATCH(0) を使うときの注意点
必ず「0」を書く
MATCH の第3引数を省略すると、「近似値検索」になってしまいます。
検索値と“完全一致していない別の値”でヒットする可能性があり、
マスタ参照などでは事故のもとです。
完全一致で探したいときは、必ず 0 を明示しましょう。
=MATCH(検索値, 検索範囲, 0)
文字列と数値の違いに注意
見た目は同じでも、
- “123”(文字列)
- 123(数値)
は別物です。
検索値と検索範囲のデータ型が揃っていないと、MATCH(0) では見つかりません。
うまく見つからないときは、
TEXT関数やVALUE関数でデータ型を揃えるのが定番です。
=MATCH(TEXT(E2,"00000"), A2:A100, 0)
のように、「コードをすべて5桁文字列として扱う」などの工夫が有効です。
返ってくるのは「位置」であって、セル参照ではない
MATCH の結果は「3」のような“番号”です。
そのままでは値は取れないので、INDEX などと組み合わせて「位置 → 値」に変換します。
=INDEX(B2:B100, MATCH(E2, A2:A100, 0))
とすると、
- MATCH が「位置」を返し、
- INDEX が「その位置の値」を返してくれる
という流れになります。
例題
問題1: A2:A10 に商品コードが入っています。E2 の商品コードが A2:A10 の中で何番目かを F2 に表示してください(完全一致で)。
=MATCH(E2, A2:A10, 0)
問題2: 1行目 A1:E1 に「日付, 担当者, 商品, 数量, 売上」が並んでいます。「数量」が何番目の列かを F1 に表示してください(完全一致で)。
=MATCH("数量", A1:E1, 0)
問題3: A2:A100 に社員番号、B2:B100 に氏名があります。E2 の社員番号と完全一致する社員の氏名を F2 に表示してください(MATCH(0)+INDEX)。
=INDEX($B$2:$B$100, MATCH(E2, $A$2:$A$100, 0))
問題4: A2:A100 に商品コード(5桁の文字列)、E2 には数値として商品コードが入っています。E2 を5桁の文字列に変換してから完全一致検索し、A2:A100 の中で何番目かを F2 に表示してください。
=MATCH(TEXT(E2,"00000"), A2:A100, 0)
問題5: A2:A100 に商品コード、B2:B100 にカテゴリがあります。E2 の商品コードが A2:A100 の中に存在するかどうかを、「存在するなら ‘あり’、存在しないなら ‘なし’」と F2 に表示してください(MATCH(0)+IFERROR)。
=IFERROR(
IF(MATCH(E2, $A$2:$A$100, 0)>0,"あり","なし"),
"なし"
)
まとめ
MATCH(0) の本質は「検索値と完全一致するセルの“位置”を返す」ことです。
=MATCH(検索値, 検索範囲, 0)で完全一致検索- 返ってくるのは「範囲内で何番目か」という番号
- その番号を INDEX などに渡すことで、実際の値やセルの中身を取り出せる
この「MATCH(0)で位置を取り、INDEXで値を取る」流れを理解すると、
VLOOKUP ではできなかった柔軟な検索ができるようになっていきます。
