エクセル関数辞典 エクセル関数辞典

MATCH関数の使い方|検索値の位置番号を取得する方法

MATCH 検索 位置番号 Excel関数 INDEX
広告スペース (article-top)

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列(ランク)
0D
100000C
300000B
500000A

売上金額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との違い

特徴VLOOKUPINDEX+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では対応できない場面でぜひ活用してみてください。

広告スペース (article-bottom)

あわせて読みたい