- XMATCH関数により、指定した値(検索キー)が検索範囲内で何番目の位置にあるのかを取得することができます。
機能と構文
基本的な機能は「検索キーの値を検索範囲から探し、検索範囲の何番目に(はじめて)みつかるか、その数値を返す」というものです。
構文は次のとおりです。
XMATCH(検索キー, 検索範囲[, 一致モード, 検索モード])
最初の2つの引数が必須となっています。
また、第3,第4引数については次の値を設定できます。これらについては基本的な使用例の後で紹介します。
値 | 効果 |
---|---|
0 | 完全一致検索をする(既定値)。 |
1 | 完全一致検索をし、値がなければ検索キーより大きい直近の値を検索する。 |
-1 | 完全一致検索をし、値がなければ検索キーより小さい直近の値の値を検索する。 |
2 | ワイルドカードを使った文字列検索をする。 ワイルドカードとして使える文字は「*」(0文字以上の文字),「?」(任意の1文字),「~」(*?~の3種の文字を検索する際のエスケープ用)の3種です。 |
値 | 効果 |
---|---|
1 | 検索範囲内を先頭(上)から順に検索する(既定値)。 |
-1 | 検索範囲内を末尾(下)から順に検索する。 |
2 | 検索範囲内をバイナリ検索で検索する。 検索範囲の値が昇順になるように表を並べ替えておく必要があります。 |
-2 | 検索範囲内をバイナリ検索で検索する。 検索範囲の値が降順になるように表を並べ替えておく必要があります。 |
基本的な使用例
最初の2つの引数(検索キー, 検索範囲)だけを使った例です。
次の画像ではE3セルにXMATCH関数を使った式を入力して、D3セルに入力された県名をB3:B8の範囲から検索し、範囲内での位置(2=2番目)を取得しています。
E3セル
=XMATCH(D3,B3:B8)
D3が検索キー、B3:B8が検索範囲となります。
従前のMATCH関数だと、(多用される)完全一致検索をするには第3引数を「0」と指定する必要がありましたが、XMATCH関数では完全一致検索が既定値になっているので引数を意識せずに済みます。
また、横並びの配列(データが増えると横に伸びていく形)からでも位置を取得できます。
検索キーが見つからない場合は#N/Aエラーとなります。
XLOOKUP関数だと見つからないときに表示させる値を指定することができますが、XMATCH関数にその機能はありません。
典型的な利用例としては、いわゆるクロス抽出が挙げられます。
次の画像では、H3セルに入力されている店名と、I3セルに入力されている月名をもとに、表から売り上げの数値を取得しています。
J3セル
=INDEX(C3:F7,XMATCH(H3,B3:B7),XMATCH(I3,C2:F2))
基本的にはINDEX関数を使ってC3:F7の範囲から売り上げを検索しますが、H3セルの値(大阪支店)とI3セルの値(5月)を手掛かりとして、上から何行目、左から何列目の値を取得するか指定する必要があります。
そこで「XMATCH(H3,B3:B7)」で行の位置を、「XMATCH(I3,C2:F2)」で列の位置を求めています。H3セルの値(大阪支店)はB3:B7の範囲内で上から4番目にありますので行の位置は4となり、I3セルの値はC2:F2の範囲内で左から2番目にあるので列の位置は2となります。
よって上記の式は「=INDEX(C3:F7,4,2)」と同じ意味になり、最終的に「20694」が取得されます。
XLOOKUPによる検索が便利なものになっているのでXLOOKUP関数をネストするだけでも抽出できますが、こちらもよく使われる方法なので覚えておいて損はないと思います。
第3引数(一致モード)の効果と使用例
第3引数には次の4種の値を指定でき、省略した場合は0を指定したものとみなされます。
値 | 効果 |
---|---|
0 | 完全一致検索をする(既定値)。 |
1 | 完全一致検索をし、値がなければ検索キーより大きい直近の値を検索する。 |
-1 | 完全一致検索をし、値がなければ検索キーより小さい直近の値の値を検索する。 |
2 | ワイルドカードを使った文字列検索をする。 ワイルドカードとして使える文字は「*」(0文字以上の文字),「?」(任意の1文字),「~」(*?~の3種の文字を検索する際のエスケープ用)の3種です。 |
以下では0以外を指定する例を見てみます。
まず1を指定する例です。
ここでは人口を検索キーとしてC3:C8の検索範囲から位置を取得しています。
検索キーである105は検索範囲に存在しませんが、第5引数を1とすることにより(一致する値がない場合に)検索キーより大きい直近の値を検索するので、結果として118という人口が記録されている位置の「2」を取得しています。
なお、表を人口順にソートしておく必要はありません(次の例も同様)。
G3セル
=XMATCH(F3,C3:C8,1)
次に-1を指定する例で、ここでも人口を検索キーとして位置を取得しています。
検索キーである105は検索範囲(C3:C8)に存在しませんが、第5引数を-1とすることにより(一致する値がない場合に)検索キーより小さい直近の値を検索するので、104という人口が記録されている位置の「5」を取得しています。
G3セル
=XMATCH(F3,C3:C8,-1)
2を指定する例です。
記事冒頭の例と同様に、B3:B8の検索範囲から県名の位置を取得する例ですが、第5引数を2するとともに検索キーを「*島*」と指定しています。
「*」は0文字以上の文字を意味するワイルドカードとして解釈されるので「*島*」は「島」の字を含む文字列という意味になり、結果的に福島県の位置である「6」を取得しています。
G3セル
=XMATCH(F3,B3:B8,2)
第4引数(検索モード)の効果と使用例
第4引数には次の4種の値を指定できます。省略した場合は1を指定したものとみなされます。
値 | 効果 |
---|---|
1 | 検索範囲内を先頭(上)から順に検索する(既定値)。 |
-1 | 検索範囲内を末尾(下)から順に検索する。 |
2 | 検索範囲内をバイナリ検索で検索する。 検索範囲の値が昇順になるように表を並べ替えておく必要があります。 |
-2 | 検索範囲内をバイナリ検索で検索する。 検索範囲の値が降順になるように表を並べ替えておく必要があります。 |
2や-2を指定したときの効果ですが、つまり検索を高速に行えるようになります。ただし、相当大量のデータでないと違いがわからず、実際にあまり使用もされないので実例は省略します。
よって-1を指定する例だけみてみます。
画像は県名を検索キーとして検索していますが、検索キーである「岩手県」が検索範囲内に3つあります。
第4引数を-1とすることにより検索範囲内を末尾(下)から順に検索するため、岩手県のうち最も末尾に近い位置である「7」を取得しています。
E3セル
=XMATCH(D3,B3:B11,,-1)
応用例
実際に位置を取得して何をするかというとたいていは表引きですが、それはXLOOKUP関数でできてしまうので、XMATCH関数の使用機会はそれほど多くないと考えられます。
変わった使用例として次の記事で、XMATCH関数をMODE関数などと組み合わせ、最も多く出現する文字列を取得するという例を紹介しています。
また次の記事では、XMATCH関数により得られた数値をソートに用いるという使用例を紹介しています。