「商品リストの中で指定商品が何行目にあるか知りたい」「表の左端から条件に合う列番号を取得したい」――そんな場面で活躍するのがXMATCH(エックスマッチ)関数です。
XMATCHは、従来のMATCH関数を大幅に強化したExcel 365 / Excel 2021以降で使える新世代の検索位置取得関数です。完全一致・近似一致・ワイルドカード・二分探索の4つの検索モード、さらに末尾からの逆順検索まで1つの関数でカバーします。INDEX関数やXLOOKUP関数と組み合わせることで、柔軟な検索・参照の仕組みを構築できます。
本記事では、XMATCHの基本構文・引数の意味・旧MATCH関数との違い・実務シナリオ別の使い方・INDEX関数との組み合わせ・XLOOKUPとの使い分け・MOS試験での出題ポイントを体系的に解説します。
XMATCH関数の基本構文
XMATCHの構文は次の通りです。
=XMATCH(検索値, 検索範囲, [一致モード], [検索モード])
| 引数 | 説明 | 省略 |
|---|---|---|
| 検索値 | 検索したい値・文字列・セル参照 | 必須 |
| 検索範囲 | 検索対象の1列または1行の範囲 | 必須 |
| 一致モード | 検索の一致方法を0~2の数値で指定(省略時は0) | 省略可 |
| 検索モード | 検索の方向・アルゴリズムを1~-2の数値で指定(省略時は1) | 省略可 |
戻り値は「検索範囲内で検索値が見つかった位置の番号(1始まりの整数)」です。見つからない場合は#N/Aエラーを返します。
一致モード(第3引数)の種類
| 値 | 動作 | 用途例 |
|---|---|---|
| 0(省略時) | 完全一致 | 商品コード・氏名などで正確に一致するものを探す |
| -1 | 完全一致または次に小さい値(昇順前提) | 価格帯・点数区分での切り下げ検索 |
| 1 | 完全一致または次に大きい値(昇順前提) | 配送料区分・割引率での切り上げ検索 |
| 2 | ワイルドカード一致(*・?・~が使える) | 品名の部分一致・パターン検索 |
検索モード(第4引数)の種類
| 値 | 動作 | 用途例 |
|---|---|---|
| 1(省略時) | 先頭から末尾へ順方向検索 | 一般的な検索(重複があれば最初に見つかったものを返す) |
| -1 | 末尾から先頭へ逆順検索 | 同一値の最後の出現位置を探す・最新行を特定する |
| 2 | 昇順ソート済みデータへの二分探索 | 大量データの高速検索(要昇順ソート) |
| -2 | 降順ソート済みデータへの二分探索 | 大量データの高速検索(要降順ソート) |
MATCH関数との違い
従来のMATCH関数は=MATCH(検索値, 検索範囲, 照合の型)という3引数構造で、一致モードの選択肢も3種類のみでした。XMATCHとの違いを整理すると次の通りです。
| 比較項目 | MATCH関数 | XMATCH関数 |
|---|---|---|
| 使用可能バージョン | 全バージョン | Excel 365 / Excel 2021以降 |
| 引数の数 | 3(照合の型まで) | 4(一致モード+検索モード) |
| 完全一致の指定 | 0(照合の型) | 0(省略可) |
| ワイルドカード検索 | △ 一部対応(照合の型=0のとき) | ◎ 専用モード(一致モード=2)で明示的に指定 |
| 逆順検索 | ✗ 非対応 | ◎ 検索モード=-1で対応 |
| 二分探索 | △ 照合の型=1/-1の場合に自動適用 | ◎ 検索モード=2/-2で明示的に指定 |
| 省略時の動作 | 照合の型を省略すると昇順近似一致(意外な誤動作の原因になりやすい) | 省略すると完全一致(直感的) |
最も重要な違いは「省略時の動作」です。MATCH関数は照合の型を省略すると近似一致(昇順ソート前提)になるため、ソートされていないリストで意図しない結果が返ることがあります。XMATCHは省略すると完全一致になるため、誤動作リスクが大幅に低下します。
実務シナリオ1:完全一致で商品の行番号を取得する
最もシンプルな使い方として、商品コードのリストから特定コードが何行目にあるかを取得する例を示します。
A列(A2:A100)に商品コード、B列に商品名が並んでいるとします。E2セルに検索したい商品コードを入力し、F2セルで行番号を取得します。
' 完全一致で商品コードの位置番号を取得(省略時は完全一致)
=XMATCH(E2, A2:A100)
E2に「P-1023」が入力されている場合、A列の何番目にそのコードがあるかを返します(例:A列の5番目にあれば「5」)。見つからない場合は#N/Aエラーになります。
エラーを「未登録」と表示したい場合はXMATCHをIFERRORで包みます。
=IFERROR(XMATCH(E2, A2:A100), "未登録")
実務シナリオ2:ワイルドカードで部分一致検索する
商品名の一部だけわかっている場合や、コードの先頭パターンで検索したい場合はワイルドカードモード(一致モード=2)を使います。
' "東京"で始まる最初の店舗名が何行目にあるか
=XMATCH("東京*", B2:B50, 2)
' "製品"という文字を含む最初のアイテムの位置
=XMATCH("*製品*", A2:A100, 2)
ワイルドカードの記号は3種類です。
- *(アスタリスク):任意の0文字以上の文字列に一致
- ?(疑問符):任意の1文字に一致
- ~(チルダ):直後の*・?・~をワイルドカードではなくそのままの文字として扱う(エスケープ)
一致モード=2を指定しないとアスタリスクや疑問符がそのままリテラル文字として検索されるため、ワイルドカードを使う際は必ず第3引数に「2」を指定してください。
実務シナリオ3:近似一致で区分番号を取得する
配送料や割引率など「○○以上△△未満はXの区分」というルールを表で管理している場合、近似一致で区分の行番号を取得できます。
F列(F2:F6)に閾値として「0・3000・5000・10000・30000」が昇順で並んでいるとします。注文金額(G2)がどの区分に入るかを求めます。
' 完全一致または次に小さい値(切り下げ区分)
=XMATCH(G2, F2:F6, -1)
' 完全一致または次に大きい値(切り上げ区分)
=XMATCH(G2, F2:F6, 1)
一致モード=-1では「検索値以下の最大値」、一致モード=1では「検索値以上の最小値」の位置が返ります。配送料・税率区分表のルックアップには-1(切り下げ)が多く使われます。
注意:近似一致(一致モード=-1 または 1)は、検索範囲がソートされていることが前提です。ソートなしで使うと誤った位置が返ることがあります。
実務シナリオ4:逆順検索で最後の一致位置を取得する
同じ値が複数行に存在する場合に、最後に出現した行の位置を取得したいケースがあります。例えば「担当者名が同じ作業ログの最新(最後)のエントリを探す」場面です。
' 先頭から検索(最初の出現位置)
=XMATCH("山田太郎", A2:A200, 0, 1)
' 末尾から検索(最後の出現位置)
=XMATCH("山田太郎", A2:A200, 0, -1)
検索モード=-1を指定するとリストの末尾から検索を開始するため、同一値が複数ある場合に最後(最新)のものの位置番号が返ります。この機能は旧MATCH関数にはなく、XMATCH固有の強みです。
実務シナリオ5:二分探索で大量データを高速検索する
数万行以上の大量データを扱う場合、二分探索(検索モード=2または-2)を使うと処理速度が大幅に向上します。
' 昇順ソート済みデータへの二分探索
=XMATCH(E2, A2:A50000, 0, 2)
' 降順ソート済みデータへの二分探索
=XMATCH(E2, A2:A50000, 0, -2)
通常の線形検索(検索モード=1または-1)はリストを先頭から1行ずつ調べるのに対して、二分探索はリストの中央から照合を繰り返すため、理論上は検索ステップ数がlog₂(N)に削減されます。1万行のリストで14ステップ程度で完了できる計算です。
絶対条件:二分探索はデータが正しくソートされていることを前提とします。ソートされていないデータに使うと誤った位置番号が返ります。データの整列が保証されている場面(社員番号順・コード順のマスタなど)に限って使用してください。
INDEX関数との組み合わせで柔軟なルックアップを作る
XMATCHが返すのは「位置番号」であり、値そのものではありません。XMATCHで取得した位置番号をINDEX関数に渡すことで、任意の列の値を取り出せます。
A列に商品コード、B列に商品名、C列に単価が入っている表から、コード検索で商品名と単価を同時に取り出す例です。
' コードの行番号を取得
=XMATCH(E2, A2:A100)
' INDEX+XMATCHで商品名を取得(B列から)
=INDEX(B2:B100, XMATCH(E2, A2:A100))
' INDEX+XMATCHで単価を取得(C列から)
=INDEX(C2:C100, XMATCH(E2, A2:A100))
XMATCH単体で求めた位置番号をセル参照として使い回す設計にすると、XMATCHを1回計算するだけで複数の列からデータを引き出せます。
' H2セルにXMATCHの結果を格納(E2のコードの行番号)
' H2: =XMATCH(E2, A2:A100)
' I2: 商品名
=INDEX(B2:B100, H2)
' J2: 単価
=INDEX(C2:C100, H2)
' K2: 在庫数(D列)
=INDEX(D2:D100, H2)
LET関数と組み合わせると、XMATCH計算を1回にまとめつつ複数列の値を同時に取り出す式を単一セルで完結させることもできます。
' LET関数でXMATCHの計算を1回にまとめる(Excel 365のみ)
=LET(
pos, XMATCH(E2, A2:A100),
name, INDEX(B2:B100, pos),
price, INDEX(C2:C100, pos),
name & "(単価:" & price & "円)"
)
応用:行・列の二次元検索でクロス集計表から値を取り出す
XMATCHを行方向・列方向に2つ使い、INDEXと組み合わせることで、クロス集計表(マトリクス表)から行・列を同時に指定して値を取り出すことができます。
B3:F6のクロス集計表(行見出しがA3:A6、列見出しがB2:F2)から、商品名(H2)と月(H3)の交点の値を取り出す例です。
' 行見出しから行番号を取得
=XMATCH(H2, A3:A6)
' 列見出しから列番号を取得
=XMATCH(H3, B2:F2)
' INDEX+2つのXMATCHでクロス検索
=INDEX(B3:F6, XMATCH(H2, A3:A6), XMATCH(H3, B2:F2))
この「INDEX + XMATCH × 2」の構成はExcel学習者の定番テクニックです。行と列の両方を検索値で柔軟に指定でき、表の構造が変わっても検索値さえ正しければ正確な値が返ります。
XLOOKUP関数との使い分け
Excel 365 / Excel 2021では「値を検索して取り出す」XLOOKUPと「位置番号を取得する」XMATCHが対になる関係にあります。どちらを使うかは最終的に何が必要かによります。
| 比較項目 | XLOOKUP | XMATCH(+INDEX) |
|---|---|---|
| 戻り値の種類 | 値そのもの(文字列・数値・セル範囲) | 位置番号(整数) |
| 複数列の返し方 | 戻り範囲を複数列に指定すればスピルで複数列一括返却 | XMATCHで位置番号を1回取得→INDEX(列, 位置)を繰り返す |
| 動的な列選択 | 戻り範囲を変えれば対応できるが式を書き直す必要がある | INDEX(行全体, XMATCH(検索値, 見出し行))で列名から動的に列を選択できる |
| 逆順検索 | ◎ 検索モード=-1で対応 | ◎ 検索モード=-1で対応(同等) |
| 位置番号の利用 | ✗ 値を返すため番号は取れない | ◎ 番号そのものが必要な場面(OFFSET連携・表示位置計算)に最適 |
| シンプルな「値を引く」用途 | ◎ 1関数で完結・直感的 | △ INDEX+XMATCHの2関数構成になる |
結論として、「ある値を検索して別の列の値を返したい」だけならXLOOKUPが簡潔です。一方で「列見出しを検索して動的に列番号を決めたい」「位置番号自体を他の計算に使いたい」「INDEXと組み合わせて行・列の二次元検索をしたい」場合はXMATCHが威力を発揮します。
エラーの原因と対処法
| エラー | 主な原因 | 対処法 |
|---|---|---|
| #N/A | 検索値が検索範囲に存在しない | IFERRORで包んで「未登録」などの代替値を返す。検索値のスペース・全半角の違いも確認する |
| #VALUE! | 検索範囲が複数列・複数行のセル範囲になっている | XMATCHの検索範囲は必ず1列または1行の単一行列を指定する |
| #NAME? | Excel 365 / 2021未満のバージョンでXMATCHを使っている | Excel 2019以前ではMATCH関数を使う。バージョンをアップグレードするか、MATCH関数に書き換える |
| 意図しない位置番号 | 二分探索モードでデータがソートされていない | 検索モード=2/-2は必ずデータをソートしてから使う。ソートできない場合は検索モード=1を使う |
| 意図しない近似一致 | 一致モードに0以外を指定しているが完全一致のつもりだった | 完全一致が必要なときは第3引数を0または省略する |
MOS試験でのXMATCHと検索関数の出題ポイント
MOS Excel 365試験の「数式と関数」スキル項目では、XLOOKUP・INDEX・MATCHなどの検索系関数が頻出です。XMATCHは比較的新しい関数であり、試験での出題頻度は増加傾向にあります。関連する関数全体を整理して対策しましょう。
- MATCH関数:全バージョン対応の位置取得関数。照合の型0/1/-1の違いと「省略すると1になる」点を理解しておく
- XMATCH関数:MATCH関数の上位互換。一致モード・検索モードの組み合わせによる4種の検索が出題される可能性がある
- INDEX関数:XMATCHと組み合わせて「INDEX+XMATCH」パターンで値を返す構成は頻出
- XLOOKUP関数:XMATCH+INDEXの代替としての位置づけも理解しておく
- IFERROR関数:検索失敗時の#N/Aエラー処理との組み合わせも定番
MOS試験 XMATCH / 検索関数チェックリスト
| 確認ポイント | 操作内容 | 難易度 |
|---|---|---|
| XMATCH完全一致の入力 | =XMATCH(E2, A2:A100)を正しく入力できる | ★☆☆ |
| 一致モードの使い分け | 0(完全)/-1(切り下げ)/1(切り上げ)/2(ワイルドカード)の意味を答えられる | ★★☆ |
| 逆順検索の指定 | 第4引数を-1にして末尾から検索する式を書ける | ★★☆ |
| INDEX+XMATCHの組み合わせ | =INDEX(列範囲, XMATCH(検索値, 検索列))の構造を正確に入力できる | ★★★ |
| 二次元クロス検索 | INDEX(表範囲, XMATCH(行検索値, 行見出し), XMATCH(列検索値, 列見出し))を組み立てられる | ★★★ |
| MATCHとXMATCHの違い | 省略時の動作の違い・逆順検索の可否を説明できる | ★★☆ |
| IFERRORとの組み合わせ | #N/Aエラーを任意の文字列で置き換える式を作れる | ★★☆ |
まとめ:XMATCHはMATCH関数の完全上位互換
本記事のポイントをまとめます。
- XMATCHの役割:検索範囲の中で検索値が何番目にあるかを返す。MATCHの上位互換で、一致モード・検索モードの2軸で検索動作を細かく制御できる
- 省略時は完全一致:第3・第4引数を省略するとそれぞれ「完全一致」「先頭から順方向」になる。旧MATCH関数は省略すると近似一致になるため誤動作しやすかった点が改善されている
- 4つの一致モード:完全一致(0)・切り下げ近似(-1)・切り上げ近似(1)・ワイルドカード(2)。特にワイルドカードモードは明示的な指定が必要
- 逆順検索:検索モード=-1で末尾から検索でき、同一値の最後の出現位置を取得できる。旧MATCHにはない機能
- INDEX+XMATCHが定番:XMATCHで取得した位置番号をINDEXに渡すことで任意の列の値を取り出せる。二次元クロス検索にも応用できる
- XLOOKUPとの使い分け:単純な値の取り出しはXLOOKUP、位置番号そのものが必要な場合や動的な列選択にはXMATCH+INDEXが適している
- MOS試験対策:MATCH関数との違い・INDEX+XMATCHの組み合わせ・IFERRORとの連携を重点的に理解する
Excel 365を使っているなら、MATCH関数はXMATCHに切り替えることをお勧めします。省略時の動作が直感的で、ワイルドカード検索・逆順検索などの機能追加により、現場のさまざまな検索要件に1つの関数で対応できます。INDEX関数と組み合わせてクロス集計表からの値取り出しまで覚えれば、Excel検索スキルは実務レベルに到達します。
PR
XLOOKUP・XMATCH・LET・LAMBDAなどExcel 365の新関数を実務シナリオで丁寧に解説。Copilot連携まで対応した最新版で、本記事で紹介した検索関数の使い方をさらに深く学べます。
PR
INDEX+MATCH・XLOOKUP・XMATCH系の検索関数を中心に、業務直結の時短テクニックを豊富に収録。関数の組み合わせパターンが一覧でわかり、実務への応用力が高まります。
