スプレッドシートのXMATCH関数の使い方|MATCHとの違い・逆方向検索まで解説

スポンサーリンク

スプレッドシートで MATCH関数 を使っていて、「末尾から検索できたらラクなのに」と思ったことはありませんか?日報や作業ログのように下へ追記していく台帳で、同じ担当者名が並んでいると、最新(最後)のエントリだけ拾いたいのに先頭側がヒットしてしまいますよね。

そんなときに頼りになるのが XMATCH関数 です。MATCH関数の上位互換にあたる検索系関数で、逆方向検索・ワイルドカード専用モード・並べ替え不要の近似一致・バイナリサーチ・正規表現まで、MATCHにはない機能が一通り揃っています。

この記事では、XMATCH関数の構文と引数の基本から、一致モード4種・検索モード4種の早見表、実務シーン別の応用例(最新ロット取得・INDEX+XMATCHで左方向検索・行列クロス検索・IFERRORでエラー回避)、MATCH関数との比較表、よくあるエラーの対処法までまとめて解説します。MATCH関数からの乗り換えを検討している方はもちろん、INDEX+MATCHの式に慣れている方ほど効果を実感しやすい関数ですよ。

  1. スプレッドシートのXMATCH関数とは?MATCHの上位互換にあたる位置検索関数
    1. XMATCH関数で何ができる?
    2. XMATCH関数とMATCH関数の違い(ざっくり)
  2. XMATCH関数の構文と引数
    1. 基本構文
    2. 引数の説明
    3. 一致モード5種の早見表
    4. 検索モード4種の早見表
  3. XMATCH関数の基本的な使い方
    1. 完全一致で位置を取得する(一致モード 0)
    2. ワイルドカードで部分一致検索する(一致モード 2)
    3. 近似一致で最も近い値を取得する(一致モード -1 / 1)
    4. 正規表現で柔軟に一致させる(一致モード 3・スプレッドシート独自)
  4. XMATCH関数の実践的な使い方・応用例
    1. 逆方向検索で最新データの位置を取得する
    2. INDEX+XMATCHで左方向の列を検索する
    3. INDEX+XMATCHで行列クロス検索する
    4. IFERRORと組み合わせてエラーを防ぐ
    5. バイナリサーチで大量データを高速検索する
    6. 実務シナリオ: 在庫表で最新ロットの位置を取得する
  5. XMATCH関数のよくあるエラーと対処法
    1. #N/Aエラー(検索値が見つからない)の対処法
    2. #VALUE!エラー(範囲指定が不正)の対処法
    3. 大文字小文字・全角半角の表記ゆれ対策
  6. XMATCH関数とMATCH関数の違い・使い分け
    1. MATCH→XMATCHへの書き換え(Before/After)
    2. どちらを選ぶべき?シーン別の判断基準
    3. XMATCH関数とXLOOKUP関数の使い分け
    4. INDEX+MATCHとの違い
  7. まとめ:XMATCH関数で位置検索を一段ラクにする
    1. 関連記事

スプレッドシートのXMATCH関数とは?MATCHの上位互換にあたる位置検索関数

XMATCH関数(読み方: エックスマッチ関数)は、検索範囲から指定した値を探し、その値が何番目にあるかを数値で返す関数です。関数名の「X」はExtended(拡張)の意味で、MATCH関数 を強化した上位互換にあたります。位置番号を返す点はMATCHと同じですが、検索の方向や一致の仕方を細かく指定できるのが特徴です。

たとえば部署列(C2:C6)から「総務部」が何番目にあるかを調べると、=XMATCH("総務部", C2:C6) で「3」が返ります。返るのは値そのものではなく、あくまで位置(インデックス)です。

XMATCH関数で何ができる?

XMATCH関数が活躍するのは、おもに次のような場面です。

  • 検索値が範囲の 何番目にあるか を数値で取得したい(INDEX関数と組み合わせる前提のケース)
  • 日報・作業ログなどの追記型データから 最新のエントリ位置 だけを拾いたい
  • 検索列が範囲の左端にない表で、VLOOKUP関数 では届かない 左方向の検索 をしたい
  • 大きな表で 行と列の見出しを同時に検索 して、クロス検索を組みたい
  • 「ぴったり85点はないけれど80点台のランクは何位か」のような 近似一致 を、並べ替えなしで実現したい

NOTE

XMATCH関数が返すのは「位置番号」であって値そのものではありません。値を直接取得したい場合は、INDEX関数XLOOKUP関数 と組み合わせて使います。XMATCH関数は「位置」を返す部品として、INDEX関数との組み合わせで真価を発揮します。

XMATCH関数とMATCH関数の違い(ざっくり)

詳しい比較は後半の「XMATCH関数とMATCH関数の違い・使い分け」で解説しますが、ざっくり押さえておきたい違いは次の3点です。

  • デフォルトが完全一致(MATCHは近似一致)なので、引数の指定ミスが起きにくい
  • 逆方向検索(末尾から検索)が可能 で、追記型の台帳と相性がよい
  • 近似一致でデータの並べ替えが不要 になり、事前のソート作業が要らない

XMATCH関数の構文と引数

基本構文

XMATCH関数の構文はこちらです。

=XMATCH(検索値, 検索範囲, [一致モード], [検索モード])

引数は4つあります。第3引数(一致モード)と第4引数(検索モード)は省略可能で、省略時はそれぞれ「完全一致」「先頭から検索」になります。

引数の説明

引数必須/省略可説明指定例
検索値必須探したい値(文字列・数値・セル参照)“営業部”、E001、A1
検索範囲必須検索対象の 1行または1列 の範囲A2:A6、B1:F1
一致モード省略可一致の判定方法(0, -1, 1, 2, 3)0
検索モード省略可検索する方向(1, -1, 2, -2)1

省略した場合は「先頭から完全一致で検索」という最もシンプルな動作になります。MATCH関数とは異なりデフォルトが完全一致なので、第3引数の書き忘れによる事故が起きにくいのがメリットです。

TIP

検索範囲には 1行または1列 だけを指定します。A1:C5 のような2次元の範囲を渡すと #VALUE! エラーになります。複数列を横断して検索したい場合は、後述の「INDEX+XMATCHでクロス検索する」パターンを使いましょう。

一致モード5種の早見表

一致モードは、検索値と範囲内の値をどう照合するかを決める引数です。

一致モード動作データの並び順主な用途
0(デフォルト)完全一致。値がぴったり一致する位置を返す不問通常の検索
-1検索値以下の最大値 の位置を返す不問価格帯・点数のランク判定
1検索値以上の最小値 の位置を返す不問在庫の繰上げ判定
2ワイルドカード一致*?~ を使用)不問部分一致検索
3正規表現一致(スプレッドシート独自)不問複雑なパターン照合

MATCH関数の近似一致ではデータの並べ替えが必須でしたが、XMATCHなら並べ替え不要で近似一致ができます。一致モード3の正規表現は Googleスプレッドシート独自の拡張 で、Excelには無い機能です。

検索モード4種の早見表

検索モードは、範囲をどの方向から探すかを決める引数です。

検索モード動作条件主な用途
1(デフォルト)先頭から検索不問通常の検索
-1末尾から逆方向検索不問最新エントリの取得
2昇順バイナリサーチ昇順にソート済み必須大量データの高速検索
-2降順バイナリサーチ降順にソート済み必須大量データの高速検索

通常は先頭から検索(1)で問題ありません。末尾から検索(-1)はXMATCH関数の目玉機能で、MATCH関数にはない便利な動作です。

XMATCH関数の基本的な使い方

ここからは具体例で動きを見ていきます。以下の社員管理表(A1:D6)を使って説明します。

 ABCD
1社員番号氏名部署役職
2E001田中太郎営業部課長
3E002鈴木花子経理部主任
4E003佐藤一郎総務部部長
5E004山田美咲営業部主任
6E005高橋健一開発部課長

完全一致で位置を取得する(一致モード 0)

部署列(C2:C6)の中で「総務部」が何番目にあるかを調べる、いちばんシンプルな使い方です。

=XMATCH("総務部", C2:C6)

結果は「3」になります。C2:C6 の中で「総務部」は C4 にあり、先頭から数えて3番目の位置だからです。

一致モードを省略しても完全一致で検索してくれます。MATCH関数では =MATCH("総務部", C2:C6, 0) のように第3引数に 0 を書く必要がありましたが、XMATCHなら省略できる分シンプルです。

ワイルドカードで部分一致検索する(一致モード 2)

部分一致で検索したいときは、一致モードに 2 を指定します。*(任意の文字列)と ?(任意の1文字)が使えます。

ワイルドカード意味使用例
*(アスタリスク)任意の文字列(0文字以上)"*太郎" → 太郎で終わる値
?(クエスチョン)任意の1文字"E00?" → E001〜E009
~(チルダ)*? 自体をエスケープ"~" を検索

たとえば氏名列から「鈴木」で始まる人の位置を調べるには、こう書きます。

=XMATCH("鈴木*", B2:B6, 2)

結果は「2」です。B2:B6 の中で「鈴木花子」が2番目にあるため、その位置が返ります。

NOTE

MATCH関数では完全一致モード(0)でワイルドカードが使えましたが、XMATCHではワイルドカード専用の一致モード(2)に分離されています。完全一致モード(0)のままだと ?ただの文字 として扱われるので、"鈴木" を検索しても #N/A になります。

近似一致で最も近い値を取得する(一致モード -1 / 1)

数値データに対して「ぴったり一致する値がなければ、近い値で代用する」モードです。

  • -1(以下の最大値): 検索値以下で最も大きい値の位置を返す
  • 1(以上の最小値): 検索値以上で最も小さい値の位置を返す

たとえば、点数テーブル {60, 70, 80, 90} に対して85点のランクを調べたいとします。テーブルに85はありませんが、以下のように書けば80の位置が返ります。

=XMATCH(85, {60,70,80,90}, -1)

この式は「3」を返します。85以下の最大値は80で、テーブルの3番目だからです。逆に「85以上で最も小さい値」を取りたい場合は =XMATCH(85, {60,70,80,90}, 1) と書くと、90の位置である「4」が返ります。

MATCH関数の近似一致ではデータの昇順・降順ソートが必須でしたが、XMATCHなら 並べ替え不要 で近似一致ができます。価格帯テーブルや評価テーブルのように、後から行を追加することがある表で特に便利です。

正規表現で柔軟に一致させる(一致モード 3・スプレッドシート独自)

Googleスプレッドシート版のXMATCH関数には、Excelには無い 正規表現一致モード(3) があります。*? よりも複雑なパターンを書きたいときに使います。

=XMATCH("E00[1-3]", A2:A6, 3)

E001E003 のいずれかにマッチする最初の位置を返します。上記の例では A2 の「E001」が最初に該当するので「1」が返ります。[1-3] は文字クラスで、123 のいずれか1文字を表します。

正規表現を使うと「3桁の数字で終わる商品コード」「特定の接頭辞+数字」のような 構造的な検索 が一発で書けます。ただし正規表現に慣れていないと読みにくくなりがちなので、シンプルな部分一致ならワイルドカード(一致モード2)で十分です。

XMATCH関数の実践的な使い方・応用例

逆方向検索で最新データの位置を取得する

XMATCH関数の目玉機能が、逆方向検索(検索モード -1) です。末尾から先頭に向かって検索し、最初に見つかった位置を返します。

これが活躍するのは、日報や作業ログのような 追記型の台帳 です。下へどんどん行を追加していくシートで、同じ担当者名が何度も登場するとき、「最新(最後)のエントリだけ拾いたい」というニーズに刺さります。

=XMATCH("田中太郎", B2:B100, 0, -1)

第3引数の 0 は完全一致、第4引数の -1 が末尾からの逆方向検索です。MATCH関数では逆順検索ができなかったので、MAXIF の配列数式を組み合わせるような回りくどい式が必要でした。XMATCHなら検索モードに -1 を渡すだけで解決します。

TIP

逆方向検索でも返る値は 「先頭からの位置番号」 です。たとえば B2:B100 の80番目に該当データがあれば、検索方向に関係なく「80」が返ります。INDEX関数に渡せばそのまま該当行の値を取り出せるので、計算ロジックを変える必要はありません。

INDEX+XMATCHで左方向の列を検索する

XMATCH関数が最も活躍するのは、INDEX関数 と組み合わせる INDEX+XMATCH のパターンです。

VLOOKUP関数 は検索列が範囲の 左端 にある必要があり、左方向の検索ができません。一方、INDEX+XMATCHなら、検索列と戻り値の列を別々に指定できるので、左方向の検索も問題なく書けます。

たとえば「営業部の社員の社員番号を知りたい」とします。部署(C列)で検索して、社員番号(A列)を返す数式です。

=INDEX(A2:A6, XMATCH("営業部", C2:C6))

処理の流れは次のとおりです。

  1. XMATCH("営業部", C2:C6) → C2:C6 で「営業部」は1番目 → 「1」を返す
  2. INDEX(A2:A6, 1) → A2:A6 の1番目 → 「E001」を返す

検索範囲(C列)と戻り値の範囲(A列)を別々に指定できるため、左方向だけでなく 離れた列同士 の参照も自由自在です。

INDEX+XMATCHで行列クロス検索する

INDEX+XMATCH最大の見せ場が、行と列を同時に検索するクロス検索 です。行の位置も列の位置もXMATCHで動的に取得することで、表のどこを参照するかを完全に数式で組み立てられます。

「社員番号 E003 の役職を取得したい」というケースで見てみましょう。

=INDEX(A2:D6, XMATCH("E003", A2:A6), XMATCH("役職", A1:D1))

処理の流れはこうなります。

  1. XMATCH("E003", A2:A6) → 「3」(A列で3番目)
  2. XMATCH("役職", A1:D1) → 「4」(見出し行で4番目)
  3. INDEX(A2:D6, 3, 4) → 表の3行4列目 → 「部長」を返す

列の見出し名で位置を検索するので、途中に列が追加・移動されても数式が壊れません。大きな表や、列構成が変わる可能性があるテンプレートで特に重宝するパターンです。

IFERRORと組み合わせてエラーを防ぐ

XMATCH関数は検索値が見つからないと #N/A エラーを返します。共有シートで他の人にも触らせる表では、IFERROR関数 で囲んでエラー表示を避けるのが定番です。

=IFERROR(XMATCH("マーケ部", C2:C6), "該当なし")

「マーケ部」はデータに存在しないため、#N/A ではなく「該当なし」が表示されます。

INDEX+XMATCH の式と組み合わせる場合は、全体をIFERRORで囲む のがポイントです。

=IFERROR(INDEX(B2:B6, XMATCH("E010", A2:A6)), "見つかりません")

XMATCH側にだけIFERRORを掛けると、INDEX関数に「該当なし」が渡されて別のエラーになります。エラーの起点となる関数ではなく、最終的な数式全体をIFERRORで包みましょう。

バイナリサーチで大量データを高速検索する

データが数万行を超えていて、かつ すでに昇順または降順にソート済み の場合は、バイナリサーチ(検索モード 2 または -2)が使えます。

=XMATCH("E003", A2:A10000, 0, 2)

二分探索のアルゴリズムで検索するので、線形検索よりも処理が高速です。ただし データが正しくソートされていないと誤った結果を返す ので注意が必要です。

NOTE

数万行レベルでも体感差が出にくいケースが多いです。バイナリサーチは「ソート済みであることを保証できる」「再計算回数が多い」など、明確に高速化を必要とする場面で導入を検討しましょう。並べ替えコストとのトレードオフも忘れずに。

実務シナリオ: 在庫表で最新ロットの位置を取得する

応用パターンとして、入出庫履歴から特定の商品の 最新ロット行 を取り出すケースを見てみましょう。A列に商品コード、B列にロット番号、C列に入庫日が並んでいる入庫履歴を想定します。

=INDEX(B2:B500, XMATCH("APPLE-01", A2:A500, 0, -1))

XMATCH("APPLE-01", A2:A500, 0, -1) で「APPLE-01」の 末尾側の出現位置 を取得し、その位置のロット番号を INDEX で取り出しています。逆方向検索(-1)を使うことで、最後に入庫されたロット番号だけを拾えます。

「最新の単価」「最終更新日」など、追記型データから最新値を取り出す処理は実務で頻出です。INDEX+XMATCH+逆方向検索の3点セットは覚えておくと応用が利きます。

XMATCH関数のよくあるエラーと対処法

XMATCH関数で発生しやすいエラーと、その原因・対処法を早見表にまとめます。

エラー主な原因対処法
#N/A検索値が範囲内に存在しないデータの有無を確認する。IFERRORで囲む
#N/Aデータ型の不一致(数値と文字列の混在)検索値と範囲のデータ型を揃える
#N/Aワイルドカードを一致モード0で使っている一致モードを2に変更する
#VALUE!検索範囲に2次元の範囲を指定(例: A1:C5)1行または1列の範囲に変更する
#VALUE!一致モードや検索モードに無効な値を指定0, -1, 1, 2, 3(一致モード)/ 1, -1, 2, -2(検索モード)
期待と違う結果全角/半角・大文字小文字の不一致ASC関数・UPPER関数などで事前に正規化

#N/Aエラー(検索値が見つからない)の対処法

XMATCH関数でいちばん多いエラーです。データ自体が存在しない場合と、型の不一致 で見つからない場合の2パターンがあります。

セルの見た目は同じ数字でも、片方が数値・もう片方が文字列だと別物と判定されます。確認するには、対象セルを選択して数式バーの表示をチェックしてください。文字列として入力された数字はセル内で 左寄せ で表示されます(数値は右寄せ)。VALUE関数で文字列を数値に変換すれば、型を揃えられます。

=XMATCH(VALUE(A2), B2:B100, 0)

逆に範囲側が数値で検索値が文字列なら、検索値を VALUE("123") のように変換します。どちらに揃えるかはデータの実体に合わせて選びましょう。

#VALUE!エラー(範囲指定が不正)の対処法

検索範囲に2次元の範囲(A1:C5など)を指定すると発生します。XMATCH関数は 1行または1列のみ を受け付けます。

=XMATCH("総務部", C2:D6)

このように2列を渡すと #VALUE! になります。複数列を横断して検索したい場合は、前述の「INDEX+XMATCHで行列クロス検索する」のように、行用と列用の2つのXMATCHに分けてください。

大文字小文字・全角半角の表記ゆれ対策

XMATCH関数の値の照合は 大文字と小文字を区別しません(”ABC” と “abc” は同じ)。一方で 全角と半角は別物 として扱います(”E001″ と “E001” は別)。

データに全角の英数字や記号が紛れ込んでいる場合は、事前に ASC関数で半角に統一しておくと安心です。

=XMATCH(ASC(A2), ARRAYFORMULA(ASC(C2:C100)), 0)

検索値と範囲の両方を ASC で半角化することで、表記ゆれを吸収できます。範囲側に ARRAYFORMULA を使うのは、関数を範囲全体に適用するためです。

XMATCH関数とMATCH関数の違い・使い分け

XMATCHはMATCH関数の上位互換です。主な違いを比較表で整理します。

比較項目MATCHXMATCH
デフォルトの一致モード近似一致(1)完全一致(0)
近似一致の並べ替え昇順/降順が必須不要
逆方向検索(末尾から検索)不可可能(検索モード -1)
ワイルドカード完全一致モード(0)で使用専用モード(2)で使用
バイナリサーチ不可可能(検索モード 2 / -2)
正規表現不可一致モード 3(スプレッドシート独自)
引数の数3つ(検索値・範囲・一致モード)4つ(検索値・範囲・一致モード・検索モード)

MATCH→XMATCHへの書き換え(Before/After)

実務でよく使う完全一致のパターンを、書き換え例で見てみましょう。

Before(MATCH関数):

=MATCH("総務部", C2:C6, 0)

After(XMATCH関数):

=XMATCH("総務部", C2:C6)

第3引数の 0 を省略できる分、XMATCHのほうがシンプルです。完全一致がデフォルトなので、書き忘れによるエラーの心配もありません。

どちらを選ぶべき?シーン別の判断基準

判断基準はシンプルに次のとおりです。

  • 新しく数式を作る場合 → XMATCH関数がおすすめ。デフォルト完全一致で安全
  • 既存シートを部分修正する場合 → 既存のMATCH関数に合わせて統一感を優先
  • 末尾側の一致を取得したい場合 → XMATCH関数の逆方向検索(-1)一択
  • 大量データを高速検索したい場合 → XMATCH関数のバイナリサーチ(2/-2)
  • 正規表現で複雑なパターンを検索したい場合 → XMATCH関数の一致モード3

XMATCH関数とXLOOKUP関数の使い分け

「値そのものを取得したいだけ」なら、XLOOKUP関数 のほうがシンプルに書けます。

=XLOOKUP("E003", A2:A6, D2:D6)

XLOOKUPは検索範囲と戻り値範囲を直接指定するので、INDEX+XMATCHの2段構えが不要です。一方で 位置番号自体が必要 なケース(行番号を別の計算に流したい・複数列を一度に取りたい・行列クロス検索したいなど)では、XMATCH関数のほうが柔軟性で勝ります。

やりたいことおすすめ関数
1列のテーブルから値を取り出すだけXLOOKUP関数
位置番号を別の計算に使いたいXMATCH関数
行と列の見出しから値を取り出したい(クロス検索)INDEX + XMATCH
検索列の左側の値を取り出したいXLOOKUP関数 または INDEX + XMATCH
検索値が末尾側のものを取得したいXMATCH関数(検索モード -1)

INDEX+MATCHとの違い

長年の定番である INDEX+MATCH の式も、INDEX+XMATCH に置き換えるだけで動きます。

Before(INDEX+MATCH):

=INDEX(A2:A6, MATCH("営業部", C2:C6, 0))

After(INDEX+XMATCH):

=INDEX(A2:A6, XMATCH("営業部", C2:C6))

XMATCH側で 0 を省略できるだけで、ほぼ同じ感覚で使えます。逆方向検索や正規表現が必要になったとき、XMATCHのほうが拡張余地が大きいのが強みです。

まとめ:XMATCH関数で位置検索を一段ラクにする

最後にXMATCH関数のポイントを振り返ります。

  • 構文は =XMATCH(検索値, 検索範囲, [一致モード], [検索モード]) の4引数で、第3・第4引数は省略可
  • デフォルトが完全一致 なので、引数の指定ミスが起きにくい
  • 逆方向検索(検索モード -1) で、追記型の台帳から最新エントリの位置を一発取得できる
  • 近似一致で並べ替え不要 になり、価格帯や評価テーブルの参照が手軽に
  • ワイルドカードは 専用の一致モード(2) で使う。完全一致モード(0)では文字として扱われる
  • スプレッドシート版には 正規表現の一致モード(3) もあり、複雑なパターンも検索できる
  • INDEX関数 と組み合わせれば、左方向の検索・行列クロス検索 が自由自在

まずは =XMATCH("検索値", 範囲) の完全一致パターンから試してみてください。MATCH関数を使っている方は、XMATCHに切り替えるだけで検索の自由度がぐっと広がりますよ。INDEX+MATCH派の方は、MATCHXMATCH に置き換えるところから始めるのがおすすめです。

関連記事

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