=XMATCH(E2,A2:A6)は、A2:A6の中でのE2の位置を返します。最初のセルなら1、2番目なら2です。MATCHと違い、指定しなければ完全一致で探します。XMATCHにはExcel 2021かMicrosoft 365が必要です。古いバージョンではMATCH(E2,A2:A6,0)を使ってください。
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Product | Category | Price | Look for | Position | |
| 2 | Apple | Fruit | $1.20 | Carrot | 3 | |
| 3 | Pear | Fruit | $1.50 | |||
| 4 | Carrot | Vegetable | $0.80 | |||
| 5 | Bread | Bakery | $2.40 | |||
| 6 | Milk | Dairy | $1.10 |
Carrotは3番目の項目なので、F2には3と表示されます。Kiwiと入力すると#N/Aを返します。Excelのほかの検索と同じく、大文字と小文字は区別しません。
XMATCH関数の構文
=XMATCH(lookup_value, lookup_array, [match_mode], [search_mode])
| 引数 | 値 |
|---|---|
match_mode(一致モード) | 0完全一致(既定)、-1完全一致または次に小さい値、1完全一致または次に大きい値、2ワイルドカード一致 |
search_mode(検索モード) | 1最初の項目から(既定)、-1最後の項目から、2昇順のバイナリ検索、-2降順のバイナリ検索 |
バイナリのモードは、並べ替えたとても大きなリストで速くなりますが、並べ替えていないリストでは間違った位置を返します。ほかのモードは順不同のデータでも使えます。
並べ替えずに次に小さい値や大きい値を探す
match_modeを1にすると、検索値以上で最小の値を探します。サイズが順不同に並んでいても、「入るいちばん小さい箱」に答えられます。MATCHなら、リストを大きい順に並べておく必要があります。
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Box | Holds (liters) | Item (liters) | 18 | |
| 2 | S | 5 | Position | 4 | |
| 3 | XL | 50 | Box | L | |
| 4 | M | 12 | |||
| 5 | L | 25 |
18リットルが入るサイズは25と50で、小さいほうは4番目の項目25、箱Lです。E1を12にすると完全一致(M)に、40にするとXLになります。match_modeの-1は逆で、検索値以下の最大の値を探します。税率の区分や手数料の段階に使う規則です。XLOOKUPにも同じ2つのモードがあり、値を直接返します。
最後の項目から検索する
search_modeを-1にすると下から探し始めるので、XMATCHは最後に一致した位置を返します。位置は範囲の上から数えたままです。
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Date | Customer | Amount | Customer | Ben | |
| 2 | 2026-03-02 | Ben | 120 | Last position | 5 | |
| 3 | 2026-03-05 | Ana | 80 | Last date | 2026-03-20 | |
| 4 | 2026-03-09 | Ben | 45 | First position | 1 | |
| 5 | 2026-03-12 | Cara | 200 | |||
| 6 | 2026-03-20 | Ben | 60 | |||
| 7 | 2026-03-24 | Ana | 95 |
Benは位置1、3、5に出てきます。先頭からの検索は1を、末尾からの検索は5を返し、それは2026-03-20の注文です。XMATCHが登場する前は、最後の位置を求めるのに配列の工夫が必要でした:=MATCH(2,1/(B2:B7=F1))。
ワイルドカードにはmatch_modeの2が必要
match_modeが2のとき、*は任意の文字を、?はちょうど1文字を表します。ほかのモードでは普通の文字です。一方MATCHは、match_typeが0なら常にワイルドカードとして扱います。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Product | Pattern | Position | |
| 2 | Green tea | *coffee | 2 | |
| 3 | Iced coffee | ?lack* | 4 | |
| 4 | Coffee beans | |||
| 5 | Black tea | |||
| 6 | Orange juice |
*coffee(「coffee」で終わるもの)は位置2のIced coffeeに、?lack*は位置4のBlack teaに一致します。パターンの最後に*がないので、Coffee beansは*coffeeに一致しません。match_modeが2でないと同じパターンは文字そのものとして探されるので、Excelでは次の1つ目が#N/Aを返します:
=XMATCH("*coffee", A2:A6) #N/A: no cell is literally "*coffee"
=XMATCH("*coffee", A2:A6, 2) 2
XMATCHとMATCHの違い
| MATCH | XMATCH | |
|---|---|---|
| モードを省略したときの既定 | 近似一致(1)、データの並べ替えが必要 | 完全一致 |
| 次に小さい値 | 1、昇順に並べたデータ | -1、順不同でよい |
| 次に大きい値 | -1、降順に並べたデータ | 1、順不同でよい |
| ワイルドカード | 0なら常に有効 | match_modeが2のときだけ |
| 最後の一致 | できない | search_modeを-1 |
| バージョン | すべて | Excel 2021とMicrosoft 365 |
符号が逆になっています。MATCHの-1は次に大きい値を、XMATCHの-1は次に小さい値を探します。MATCH(E2,A2:A6,0)をXMATCHに書き換えるときは0を外し、近似一致のMATCHを書き換えるときは符号を反転します。そうすれば並べ替えの順番は関係なくなります。古いほうの関数はMATCHのページで説明しています。
練習: 最後の注文の位置
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Date | Customer | Amount | Customer | Ben | |
| 2 | 2026-03-02 | Ben | 120 | Last position | ||
| 3 | 2026-03-05 | Ana | 80 | |||
| 4 | 2026-03-09 | Ben | 45 | |||
| 5 | 2026-03-12 | Cara | 200 | |||
| 6 | 2026-03-20 | Ben | 60 | |||
| 7 | 2026-03-24 | Ana | 95 |
やってみよう: F2で、F1の顧客の最後の注文の位置を返してください。
よくある質問
MATCHとXMATCHの違いは何ですか?
XMATCHは既定で完全一致です(MATCHの既定は近似一致)。並べ替えたデータがなくても次に小さい値や大きい値を探せ、最後の項目から上へ検索でき、*と?をワイルドカードとして扱うのは一致モード2を指定したときだけです。Excel 2021かMicrosoft 365が必要です。
XMATCHで最後に出てくる位置を探すには?
4つ目の引数search_mode(検索モード)を-1にします:=XMATCH("Ben",B2:B7,0,-1)はB2:B7で最後のBenの位置を返します。位置は範囲の上から数えたままです。
何も一致しないとき、XMATCHは何を返しますか?
MATCHと同じく#N/Aです。別のものを表示するならIFNAで囲みます:=IFNA(XMATCH(E2,A2:A6),"Not in list")。
INDEXの中のMATCHをXMATCHに置き換えられますか?
置き換えられます。=INDEX(C2:C6,XMATCH(E2,A2:A6))はMATCH(E2,A2:A6,0)を使ったINDEXと同じように動き、0を書き忘れる心配もありません。ファイルをExcel 2019以前で開く必要があるならMATCHを使います。