「検索した値が表の何番目にあるか知りたい」。スプレッドシートでデータを扱っていると、そんな場面がよくありますよね。
VLOOKUPで値を引っ張ることはできても、位置番号そのものは取得できません。検索列より左にある値を取りたいときも、VLOOKUPだけではお手上げです。
そこで活躍するのがMATCH関数です。検索値が範囲の何番目にあるかを数値で返してくれます。この記事では、MATCH関数の基本から実践的な使い方まで解説します。INDEX関数との組み合わせで左側の列を検索する方法や、エラー対策もカバーしていきます。
スプレッドシートのMATCH関数とは?
MATCH関数(読み方: マッチ関数)は、指定した値が範囲の中で何番目にあるかを返す関数です。名前はMatch(一致する)が由来で、「探している値の位置番号を教えてくれる」イメージです。
MATCH関数にできることをまとめると、次のとおりです。
- 検索値が範囲の何番目にあるかを数値で返す
- 完全一致・近似一致(以下/以上)の3種類の検索モードに対応する
- ワイルドカードを使った部分一致検索ができる
- INDEX関数と組み合わせて柔軟な表引きを実現する
NOTE
MATCH関数が返すのは値そのものではなく「位置番号」です。値を直接取得したい場合は、INDEX関数やVLOOKUP関数と組み合わせて使います。
MATCH関数の書き方(構文と引数)
基本構文
MATCH関数の構文はこちらです。
=MATCH(検索キー, 範囲, [検索の種類])
引数は3つあります。検索の種類は省略できます。
引数の説明
| 引数 | 必須/省略可 | 意味 | 指定例 |
|---|---|---|---|
| 検索キー | 必須 | 探したい値 | “営業部”、E001 |
| 範囲 | 必須 | 検索対象の1行または1列の範囲 | A2:A6 |
| 検索の種類 | 省略可 | 検索モードの指定(0, 1, -1) | 0 |
範囲には1行または1列のみ指定できます。2次元の範囲(A1:C5など)を指定すると#VALUE!エラーになるので注意してください。
検索の種類 0・1・-1 の違い
検索の種類は3つのモードから選べます。
| 検索の種類 | 動作 | データの並び順 |
|---|---|---|
| 0 | 完全一致。値がぴったり一致する位置を返す | 不問 |
| 1(省略時のデフォルト) | 検索キー以下の最大値の位置を返す | 昇順が必須 |
| -1 | 検索キー以上の最小値の位置を返す | 降順が必須 |
実務では完全一致(0)を使うケースがほとんどです。省略すると1(近似一致・昇順)になるため、意図しない結果を防ぐためにも明示的に0を指定するのがおすすめです。
WARNING
検索の種類を1または-1にするときは、データが正しくソートされている必要があります。ソートされていないと正しい結果が返りません。
MATCH関数の基本的な使い方
完全一致で位置を取得する(検索の種類 0)
次の社員管理表を例に見てみましょう。A1:D6にデータが入っているとします。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | 社員番号 | 氏名 | 部署 | 役職 |
| 2 | E001 | 田中太郎 | 営業部 | 課長 |
| 3 | E002 | 鈴木花子 | 経理部 | 主任 |
| 4 | E003 | 佐藤一郎 | 総務部 | 部長 |
| 5 | E004 | 山田美咲 | 営業部 | 主任 |
| 6 | E005 | 高橋健一 | 開発部 | 課長 |
部署列(C2:C6)の中で「総務部」が何番目にあるか調べるにはこう書きます。
=MATCH("総務部", C2:C6, 0)
結果は「3」です。C2:C6の中で「総務部」はC4にあり、先頭から数えて3番目の位置です。
もう1つ試してみましょう。氏名列(B2:B6)の中で「高橋健一」の位置を調べます。
=MATCH("高橋健一", B2:B6, 0)
結果は「5」です。範囲の先頭から1始まりで数える点がポイントです。
なお、MATCH関数は大文字と小文字を区別しません。社員番号で検索する場合、「e003」と入力しても「E003」と同じ結果が返ります。
ワイルドカードで部分一致検索する
検索の種類を0にすると、ワイルドカードが使えます。名前の一部だけで検索したいときに便利です。
| ワイルドカード | 意味 | 例 |
|---|---|---|
| *(アスタリスク) | 任意の文字列(0文字以上) | “田中*” → 田中で始まる値 |
| ?(クエスチョン) | 任意の1文字 | “E00?” → E001〜E009 |
| ~(チルダ) | *や?自体をエスケープ | “~” → を検索 |
たとえば、氏名列から「鈴木」で始まる人の位置を調べるにはこう書きます。
=MATCH("鈴木*", B2:B6, 0)
結果は「2」です。B2:B6の中で「鈴木花子」が2番目にあるため、その位置が返ります。
複数一致する場合は最初に見つかった位置が返ります。たとえば「営業部」が2つあるデータで検索すると、先頭側の位置が返る仕組みです。
実践的な使い方・応用例
INDEX+MATCHで左側の列を検索する(VLOOKUPの制限を超える)
MATCH関数が最も活躍するのは、INDEX関数との組み合わせです。
VLOOKUP関数は検索列が範囲の左端にある必要があります。しかしINDEX+MATCHなら、検索列と戻り値の列を自由に指定できます。
たとえば「営業部の課長の社員番号を知りたい」とします。部署(C列)と役職(D列)で検索して、社員番号(A列)を返す数式です。
まずは、部署列から「営業部」の位置を取得するシンプルな例を見てみましょう。
=INDEX(A2:A6, MATCH("営業部", C2:C6, 0))
処理の流れを順に見ていきます。
- MATCH(“営業部”, C2:C6, 0) → C2:C6の中で「営業部」は1番目 → 「1」を返す
- INDEX(A2:A6, 1) → A2:A6の1番目 → 「E001」を返す
検索範囲(C列)と戻り値の範囲(A列)を別々に指定できるため、左方向の検索も問題ありません。VLOOKUPでは実現できない逆引き検索です。
INDEX+MATCHでクロス検索する(行と列を同時に指定)
ちょっとむずかしく見えますが、やっていることはシンプルです。行と列の両方をMATCHで動的に指定することで、クロス検索ができます。
「社員番号E003の役職を取得したい」とします。行の位置も列の位置もMATCHで自動判定する数式です。
=INDEX(A2:D6, MATCH("E003", A2:A6, 0), MATCH("役職", A1:D1, 0))
処理の流れを見てみましょう。
- MATCH(“E003”, A2:A6, 0) → 「3」(3行目)
- MATCH(“役職”, A1:D1, 0) → 「4」(4列目)
- INDEX(A2:D6, 3, 4) → 「部長」を返す
列の見出し名で検索するため、途中に列が追加されても数式が壊れません。大きな表を扱うときに重宝するパターンです。
IFERRORと組み合わせてエラーを防ぐ
MATCH関数は検索値が見つからないと#N/Aエラーを返します。IFERROR関数(エラー時に別の値を返す関数)で囲めば、エラー表示を防げます。
=IFERROR(MATCH("マーケ部", C2:C6, 0), "該当なし")
「マーケ部」はデータに存在しないため、「該当なし」が表示されます。
INDEX+MATCHと組み合わせる場合は、全体をIFERRORで囲みます。
=IFERROR(INDEX(B2:B6, MATCH("E010", A2:A6, 0)), "見つかりません")
社員番号E010はデータに存在しないため、「見つかりません」が表示されます。共有シートなど他の人が使う表では、IFERRORを付けておくのがおすすめです。
よくあるエラーと対処法
MATCH関数で発生しやすいエラーとその原因をまとめます。
| エラー | 主な原因 | 対処法 |
|---|---|---|
| #N/A | 検索値が範囲内に存在しない | データの有無を確認する。IFERRORで囲む |
| #N/A | 検索の種類1/-1でデータが正しくソートされていない | データを昇順/降順に並べ替えるか、検索の種類を0にする |
| #N/A | データ型の不一致(数値と文字列の混在) | 検索値と範囲のデータ型を揃える |
| #VALUE! | 範囲に2次元の範囲を指定した(例: A1:C5) | 1行または1列の範囲に変更する |
特にありがちなのが、データ型の不一致です。セルの見た目は同じ数字でも、片方が数値・もう片方が文字列だとMATCH関数は一致と判定しません。
確認するにはセルを選択して、数式バーの表示をチェックしてください。文字列として入力された数字には左寄せ表示になる特徴があります。VALUE関数(文字列を数値に変換する関数)で型を揃えると解決します。
MATCH関数とXMATCH関数の違い・使い分け
Googleスプレッドシートでは2022年以降、XMATCH関数が使えるようになりました。MATCH関数の上位互換にあたる新しい関数です。
| 特徴 | MATCH | XMATCH |
|---|---|---|
| デフォルトの検索モード | 近似一致(1) | 完全一致(0) |
| 近似一致のソート要件 | 昇順/降順が必須 | ソート不要 |
| 逆方向検索(末尾から検索) | 不可 | 可能(検索モード-1) |
| ワイルドカード | 検索の種類0で使用可 | ワイルドカードモード(2)で使用可 |
XMATCHの大きなメリットは2つあります。
- デフォルトが完全一致。検索の種類を省略しても正確な結果が返ります
- 逆方向検索ができる。同じ値が複数ある場合、末尾側の位置を取得できます
=XMATCH("営業部", C2:C6)
上の数式はMATCH関数で書くと次のようになります。
=MATCH("営業部", C2:C6, 0)
XMATCHのほうが引数を省略できる分、シンプルに書けます。
どちらを選ぶべき?
判断基準はシンプルです。
- 新しく数式を作る場合 → XMATCHがおすすめ。デフォルト完全一致で安全
- 既存のシートを修正する場合 → 既存のMATCHに合わせるのが無難
- 末尾側の一致を取得したい場合 → XMATCHの逆方向検索を使う
なお、ExcelファイルをGoogleスプレッドシートで開く場合、XMATCHはExcel 2021以降でしか対応していません。互換性が気になるならMATCH関数を使っておくのが安心です。
まとめ
MATCH関数のポイントを振り返ります。
- 構文は =MATCH(検索キー, 範囲, 検索の種類) の3引数。検索の種類は省略可
- 検索の種類は0(完全一致)を明示するのがおすすめ。省略時は1(近似一致)
- 戻り値は「位置番号」。値そのものを取得するにはINDEX関数と組み合わせる
- INDEX+MATCHでVLOOKUP関数では不可能な左方向の検索ができる
- ワイルドカード(*、?)を使えば部分一致検索にも対応
- エラー対策にはIFERROR関数を組み合わせるのが定番
まずは=MATCH(“検索値”, 範囲, 0)の完全一致パターンから試してみてください。位置番号の仕組みがわかれば、INDEX+MATCHの応用もスムーズに進みます。
