Excel関数 逆引き集 | 完全一致検索 → MATCH(0)

Excel VBA Excel
スポンサーリンク

概要

「この値と“完全に同じ”ものが、どこにあるか知りたい」
そんなときに使うのが 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 ではできなかった柔軟な検索ができるようになっていきます。

タイトルとURLをコピーしました