• 作成日 : 2025年8月25日

XMATCH関数の使い方:高度な検索を簡単に実現する方法

XMATCH関数は、指定した値がリストや表の中で何番目にあるかを調べるExcelの検索関数です。従来のMATCH関数と似ていますが、部分一致やワイルドカード、後ろからの検索など、より柔軟な検索機能が追加されています。

大規模なデータでも正確かつ高速に検索できるため、VLOOKUPの代替としても活用されています。本記事では、XMATCH関数の基本的な使い方から、実務で役立つ応用例、よくあるエラーの対処法まで、初心者にもわかりやすく紹介します。

XMATCH関数の基本的な使い方

XMATCH関数とは

XMATCH関数は、Excel 365およびExcel 2021で利用可能な動的配列関数の一つで、指定した検索値が配列内のどの位置にあるかを返します。MATCH関数の後継として設計され、より直感的な構文と強力な機能を備えています。

従来のMATCH関数との大きな違いは、検索モードの柔軟性です。完全一致、近似一致、ワイルドカード検索、正規表現風の検索まで、一つの関数で対応できます。また、検索方向も自由に指定でき、昇順・降順のソートも不要です。

なお、XMATCH関数は基本的に正規表現に対応していないものの、Insider Beta チャネル向けの新しいバージョンでは正規表現を使用できます。

参考:XMATCH 関数 – Microsoft サポート

基本構文と引数の詳細

XMATCH関数の構文は以下のとおりです。

=XMATCH(検索値, 検索配列, [一致モード], [検索モード])

各引数について詳しく説明します。

検索値:検索したい値を指定します。数値、文字列、論理値、セル参照など、あらゆるデータ型に対応します。

検索配列:検索対象となる配列またはセル範囲を指定します。一次元配列である必要があります。

一致モード(省略可能):検索の一致条件を指定します
  • 0:完全一致(既定値)
  • -1:完全一致または次に小さい値
  • 1:完全一致または次に大きい値
  • 2:ワイルドカード文字を使用した一致
  • 3:正規表現を使用した一致(新しいバージョンで追加された新機能)
検索モード(省略可能):検索の方向を指定します
  • 1:先頭から末尾へ検索(既定値)
  • -1:末尾から先頭へ検索
  • 2:昇順で並べ替えられた配列でバイナリ検索
  • -2:降順で並べ替えられた配列でバイナリ検索

基本的な使用例

商品リストから特定の商品の位置を検索する例を見てみましょう。

A列に商品名がリストアップされている場合:

=XMATCH(“りんご”, A:A)

このシンプルな構文で、「りんご」が何行目にあるかを返します。

価格表から特定の価格帯を検索する場合:

=XMATCH(15000, B:B, 1)

15000円ちょうど、またはそれより大きい最小の価格の位置を返します。

大文字小文字を区別しない検索:

=XMATCH(“apple”, A:A, 0)

XMATCHは既定で大文字小文字を区別しないため、”Apple”と”APPLE”は同一視されます。厳密な比較が必要な場合はEXACT関数を併用してください。

MATCH関数との違いを理解する

従来のMATCH関数と比較して、XMATCH関数の優位性を具体例で示します。

降順データでの検索:

MATCH関数: 事前のソートが必要

XMATCH関数: =XMATCH(検索値, 範囲, 0, -2)

最後に出現する値の検索:

MATCH関数: 配列数式が必要

XMATCH関数: =XMATCH(検索値, 範囲, 0, -1)

ワイルドカード検索:

MATCH関数: 限定的なサポート

XMATCH関数: =XMATCH(“製品*”, 範囲, 2)

XMATCH関数の実践的な利用シーン

動的なVLOOKUP代替としての活用

XMATCH関数とINDEX関数を組み合わせることで、VLOOKUPの制限を超えた柔軟な検索が可能になります。

顧客データベースから情報を抽出:

=INDEX(データ全体, XMATCH(顧客ID, ID列), XMATCH(項目名, ヘッダー行))

この組み合わせにより、列の順序に依存しない検索が実現できます。

複数条件での検索も可能です。

=INDEX(結果列, XMATCH(条件1&条件2, 列1&列2))

在庫管理システムでの応用

在庫の閾値管理において、XMATCH関数は重要な役割を果たします。

発注点に達した商品の特定:

=XMATCH(TRUE, 在庫数量<発注点, 0)

在庫回転率の高い商品から優先的に処理:

=INDEX(商品名, XMATCH(LARGE(回転率, n), 回転率, 0))

期限切れが近い商品の検出:

=XMATCH(TODAY()+30, 賞味期限列, 1)

成績処理での順位付け

学生の成績管理において、XMATCH関数を使った高度な分析が可能です。

特定の点数以上の学生数をカウント:

=COUNTA(成績範囲) – XMATCH(基準点, SORT(成績範囲), -1) + 1

成績分布の四分位点を特定:

第1四分位: =INDEX(SORT(成績), XMATCH(25%, SEQUENCE(COUNT(成績))/COUNT(成績), 1))

クラス内での相対的な位置を確認:

=XMATCH(個人成績, SORT(クラス成績, , -1), -1)

時系列データの分析

売上データや株価データなど、時系列データの分析にもXMATCH関数が活用できます。

特定の売上目標を初めて達成した日の特定:

=INDEX(日付列, XMATCH(目標値, 累計売上, 1))

前回の最高値更新からの経過日数:

=TODAY() – INDEX(日付列, XMATCH(MAX(値列), 値列, 0, -1))

移動平均線のクロスポイント検出:

=XMATCH(TRUE, 短期MA>長期MA, 0)

XMATCH関数の応用・他関数との組み合わせ

FILTER関数との連携

動的配列関数同士の組み合わせにより、より高度なデータ抽出が可能です。

条件に一致する最初のn件を抽出:

=INDEX(FILTER(データ, 条件), SEQUENCE(n))

特定位置のデータのみフィルタリング:

=FILTER(データ, SEQUENCE(ROWS(データ))=XMATCH(検索値, キー列))

XLOOKUP関数との使い分け

XLOOKUPとXMATCHの適切な使い分けにより、効率的なデータ処理が実現できます。

値を取得したい場合:

=XLOOKUP(検索値, 検索列, 結果列)

位置情報が必要な場合:

=XMATCH(検索値, 検索列)

複数の結果を取得する場合の組み合わせ:

=INDEX(データ範囲, XMATCH(検索値, キー列), SEQUENCE(1, 列数))

条件付き集計での活用

SUMIFS関数などと組み合わせて、動的な集計範囲を設定できます。

特定期間の売上集計:

開始位置: =XMATCH(開始日, 日付列, 1)

終了位置: =XMATCH(終了日, 日付列, -1)

合計: =SUM(INDEX(売上列, 開始位置):INDEX(売上列, 終了位置))

カテゴリ別の動的集計:

=SUMIFS(金額列, カテゴリ列,

INDEX(カテゴリ一覧, XMATCH(TRUE, カテゴリ別売上>基準値, 0)))

配列数式での高度な活用

XMATCH関数を配列数式として使用することで、複雑な検索ロジックを実装できます。

複数の検索値を一度に処理:

=XMATCH(検索値配列, 検索範囲)

条件を満たす全ての位置を取得:

=FILTER(SEQUENCE(ROWS(範囲)), 範囲=条件値)

最も近い値の検索(絶対値差が最小):

=XMATCH(MIN(ABS(範囲-目標値)), ABS(範囲-目標値), 0)

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

#N/Aエラーの解決

#N/Aエラーは、検索値が見つからない場合に発生するエラーです。

IFERROR関数でのエラーハンドリング:

=IFERROR(XMATCH(検索値, 範囲), “見つかりません”)

IFNAを使用したより具体的な対処:

=IFNA(XMATCH(検索値, 範囲), 0)

検索前の存在チェック:

=IF(COUNTIF(範囲, 検索値)>0, XMATCH(検索値, 範囲), “該当なし”)

#VALUE!エラーへの対応

引数の型が不適切な場合に発生します。

データ型の変換を行う:

=XMATCH(VALUE(検索値), 数値範囲)

=XMATCH(TEXT(検索値, “0”), 文字列範囲)

配列の次元を確認:

=XMATCH(検索値, INDEX(二次元配列, , 列番号))

パフォーマンスの最適化

大規模データでの検索速度を向上させる方法を紹介します。

ソート済みデータでのバイナリ検索:

=XMATCH(検索値, ソート済み範囲, 0, 2)

検索範囲の限定:

=XMATCH(検索値, OFFSET(開始セル, 0, 0, 実データ数, 1))

計算の効率化:

位置を変数に保存: =LET(位置, XMATCH(…), IF(位置>0, INDEX(…, 位置), “”))

特殊なケースへの対処

空白セルや特殊文字を含むデータでの注意点を説明します。

空白を無視した検索:

=XMATCH(検索値, FILTER(範囲, 範囲<>””))

前後の空白を除去:

=XMATCH(TRIM(検索値), TRIM(範囲))

大文字小文字を厳密に区別する場合:

=XMATCH(TRUE, EXACT(検索値, 範囲), 0)

XMATCH関数で柔軟かつ高速な検索処理を実現

XMATCH関数は、Excel 365および2021で使用可能な動的配列対応の検索関数で、MATCH関数を拡張した高機能な構文を備えています。

完全一致、近似一致、ワイルドカード検索、検索方向指定などに対応し、INDEXやFILTERと組み合わせることで柔軟なデータ抽出が可能になります。

VLOOKUPの代替や順位判定、在庫管理、時系列分析にも応用でき、IFERRORやLETとの併用により効率的な数式設計も実現できます。基本的に正規表現には対応していませんが、部分一致などで実務ニーズに対応します。


※ 掲載している情報は記事更新時点のものです。

※本サイトは、法律的またはその他のアドバイスの提供を目的としたものではありません。当社は本サイトの記載内容(テンプレートを含む)の正確性、妥当性の確保に努めておりますが、ご利用にあたっては、個別の事情を適宜専門家にご相談いただくなど、ご自身の判断でご利用ください。

関連記事