MATCH関数の使い方|検索値の位置番号を取得する方法
MATCH関数は、指定した範囲の中から検索値の位置(何番目にあるか)を返す関数です。VLOOKUP関数のように値そのものを返すのではなく、位置番号を返す点が特徴です。単独でも使えますが、INDEX関数と組み合わせることで強力な検索機能を実現できます。この記事では、MATCH関数の基本から実務での活用方法までを解説します。
MATCH関数の基本構文
=MATCH(検索値, 検索範囲, [照合の型])
引数の説明
| 引数 | 説明 | 必須/任意 |
|---|---|---|
| 検索値 | 検索する値。数値、文字列、セル参照が指定可能 | 必須 |
| 検索範囲 | 検索対象の1行または1列の範囲 | 必須 |
| 照合の型 | 0=完全一致、1=以下の最大値(既定)、-1=以上の最小値 | 任意 |
照合の型の詳細
| 照合の型 | 動作 | データの並び順 |
|---|---|---|
| 0 | 完全一致。検索値と一致する最初の値の位置を返す | 不問 |
| 1(既定) | 検索値以下の最大値の位置を返す | 昇順に並んでいる必要がある |
| -1 | 検索値以上の最小値の位置を返す | 降順に並んでいる必要がある |
実務では照合の型に0(完全一致)を指定するケースが大半です。省略すると1(近似一致)になる点に注意してください。
基本的な使い方
完全一致で位置を取得する
社員名簿のA列に以下のデータがあるとします。
| A列(A2:A6) |
|---|
| 田中太郎 |
| 鈴木花子 |
| 佐藤一郎 |
| 山田美咲 |
| 高橋健一 |
「佐藤一郎」が何番目にあるかを調べる数式です。
=MATCH("佐藤一郎", A2:A6, 0)
結果は「3」になります。A2:A6の範囲で「佐藤一郎」は3番目(A4)に位置しているためです。MATCH関数が返す位置番号は、検索範囲の先頭からの相対位置であり、シートの行番号ではない点に注意してください。
セル参照で検索値を指定する
セルC1に検索したい社員名が入力されている場合は、以下のように記述します。
=MATCH(C1, A2:A6, 0)
C1の値を変更するだけで、対応する位置番号が自動的に更新されます。
近似一致(照合の型1・-1)の使い方
照合の型1:以下の最大値
売上金額に応じたランクを判定する場合に使います。ランク基準が以下のように昇順で設定されているとします。
| A列(基準値) | B列(ランク) |
|---|---|
| 0 | D |
| 100000 | C |
| 300000 | B |
| 500000 | A |
売上金額250000のランクを求める数式です。
=MATCH(250000, A2:A5, 1)
結果は「2」です。250000以下の最大値は100000(2番目)なので、ランクCに該当します。
照合の型-1:以上の最小値
降順に並んだデータから検索する場合に使用します。評価スコアが高い順に並んでいるとき、指定スコア以上の最小値を見つけるケースなどで利用できます。
INDEX関数との組み合わせ
MATCH関数の最も重要な使い方は、INDEX関数との組み合わせです。VLOOKUP関数では実現できない柔軟な検索が可能になります。
基本的なINDEX+MATCH
商品マスタから商品コードで商品名を検索する例です。
| A列(商品コード) | B列(商品名) | C列(単価) |
|---|---|---|
| P001 | コピー用紙 | 3500 |
| P002 | トナー | 12000 |
| P003 | ボールペン | 150 |
| P004 | ファイル | 280 |
=INDEX(B2:B5, MATCH("P003", A2:A5, 0))
MATCH関数が「P003」の位置(3)を返し、INDEX関数がB2:B5の3番目の値(ボールペン)を返します。
VLOOKUPとの違い
| 特徴 | VLOOKUP | INDEX+MATCH |
|---|---|---|
| 検索方向 | 左端列から右方向のみ | 任意の方向 |
| 列の挿入・削除 | 列番号がずれる可能性 | 影響を受けにくい |
| 検索列の位置 | 範囲の左端に必要 | どの列でも可 |
| 数式の複雑さ | シンプル | やや複雑 |
| 処理速度 | 大量データで遅くなりやすい | 比較的高速 |
左方向への検索
VLOOKUPでは不可能な、検索列より左側の列を取得する例です。B列の商品名で検索してA列の商品コードを返します。
=INDEX(A2:A5, MATCH("トナー", B2:B5, 0))
結果は「P002」です。検索範囲と戻り範囲を自由に指定できるのがINDEX+MATCHの大きな利点です。
複数条件での検索
MATCH関数を配列数式として使用すると、複数の条件でデータを検索できます。
部署と氏名で検索する
以下のような社員データがあるとします。
| A列(部署) | B列(氏名) | C列(内線番号) |
|---|---|---|
| 営業部 | 田中太郎 | 1001 |
| 経理部 | 鈴木花子 | 2001 |
| 営業部 | 佐藤一郎 | 1002 |
| 総務部 | 山田美咲 | 3001 |
営業部の佐藤一郎の内線番号を取得する数式です。
=INDEX(C2:C5, MATCH(1, (A2:A5="営業部")*(B2:B5="佐藤一郎"), 0))
この数式はCtrl+Shift+Enterで確定する配列数式です(Microsoft 365ではEnterのみで動作します)。2つの条件を乗算(*)で結合し、両方の条件を満たす行の位置を取得しています。
配列数式の仕組み
(A2:A5=“営業部”)は{TRUE;FALSE;TRUE;FALSE}を返し、(B2:B5=“佐藤一郎”)は{FALSE;FALSE;TRUE;FALSE}を返します。これらを乗算すると{0;0;1;0}となり、MATCH関数が1の位置(3番目)を返します。
ワイルドカードでの検索
照合の型を0(完全一致)に設定した場合、ワイルドカードを使った部分一致検索が可能です。
使用できるワイルドカード
| ワイルドカード | 意味 | 例 |
|---|---|---|
| * | 任意の文字列 | ”田*” → 田中、田村など |
| ? | 任意の1文字 | ”田?” → 田中、田辺など |
| ~ | ワイルドカードのエスケープ | ”~*” → アスタリスク自体を検索 |
使用例
商品名に「ボール」を含むデータの位置を取得する場合です。
=MATCH("*ボール*", B2:B5, 0)
「ボールペン」が見つかり、その位置番号を返します。
MATCH関数のエラー対処
検索値が見つからない場合
検索値が範囲内に存在しないと、#N/Aエラーが返されます。IFERROR関数で対処できます。
=IFERROR(MATCH(C1, A2:A6, 0), "該当なし")
よくあるエラーの原因
| エラー | 主な原因 |
|---|---|
| #N/A | 検索値が見つからない、照合の型とデータの並び順が不一致 |
| #VALUE! | 検索範囲が1行または1列ではない |
| #REF! | 検索範囲が無効(削除された列やシートを参照) |
空白やスペースに注意
検索値や検索範囲にセルの前後の余分なスペースが含まれていると、完全一致で見つからない場合があります。TRIM関数で余分なスペースを除去してから検索するのが安全です。
=MATCH(TRIM(C1), A2:A6, 0)
まとめ
MATCH関数は、検索値の位置番号を取得するシンプルながら重要な関数です。以下のポイントを押さえておきましょう。
- 照合の型は実務では0(完全一致)を使うことが多い
- INDEX関数と組み合わせることで、VLOOKUPより柔軟な検索が可能
- 左方向への検索や複数条件検索にも対応できる
- ワイルドカードを使った部分一致検索が可能
- 検索値が見つからない場合はIFERROR関数でエラーを処理する
MATCH関数は単独で使う機会は少ないかもしれませんが、INDEX関数やOFFSET関数との組み合わせで真価を発揮します。VLOOKUPでは対応できない場面でぜひ活用してみてください。