更新日:、 作成日:

エクセル MATCH 関数:セルを検索して見つかった位置を取得する

はじめに

エクセルの MATCH 関数の使い方を紹介します。

MATCH 関数はセルを検索して見つかった位置を取得します。引数を省略したり並べ替えなくても検索できる上位互換の「XMATCH 関数」があります。

=MATCH(100,A1:A3,0) のようにして、100 を検索して列「A」の何番目の位置にあるか取得できます。

=MATCH("エクセル",A1:C1,0) のようにして、エクセル を検索して行「1」の何番目の位置にあるか取得できます。

=IFERROR(MATCH(100,A1:A3,0),0) のようにして、検索結果が見つからないときに 0 を表示できます。

複数行や複数列から検索できます。

INDEX と MATCH 関数を組み合わせて好きな列や行から検索するには「INDEX と MATCH 関数を組み合わせる」をご覧ください。
セルを検索する方法は「文字列やセルを検索する」をご覧ください。

MATCH 関数の引数

MATCH(検索値, 検索範囲)
検索範囲の中から検索値と 1 番近い値が何番目のセルにあるのかを取得します。

MATCH(検索値, 検索範囲, 一致モード)
一致モード検索値と一致するセルの位置を取得するように指定できます。

引数「検索値」検索する値を、数値、文字列、セル参照、関数などで指定します。
引数「一致モード」が 0 のときだけ、ワイルドカードを使用できます。
スピル化
引数「検索範囲」検索されるセルの範囲を 1 行または 1 列で指定します。
引数「一致モード」省略できます。検索方法を指定します。
1 または省略:検索する値と同じまたは、それ以下の最大値の位置が取得されます。引数「検索範囲」が昇順に並べられている必要があります。
0:検索する値と同じ値のセルの位置が取得されます。
-1:検索する値と同じまたは、それ以上の最小値の位置が取得されます。引数「検索範囲」が降順に並べられている必要があります。
スピル化

スピル化:セルの範囲や配列を指定すると結果が「スピル」します。

引数「検索値」

引数「一致モード」が 0 のときに使用できるワイルドカードには次のものがあります。

パターン 説明 使用例 一致例
*任意の長さの文字"あ*"あ, あい, あいう
?任意の 1 文字"あ?"あい, あか, あき
~ワイルドカードの文字 * ? を検索する"あ~?~*"あ?*

使い方

MATCH 関数の使い方を紹介します。

1 列から検索値と同じ値のセルの位置を取得する

値の列から検索値と同じ エクセル のセルの位置を取得します。引数「一致モード」に 0 を指定して、引数「検索値」と同じ値を検索できます。

=MATCH(B9,$B$3:$B$5,0)

取得される値は、一番上のセルを基準とした 1 からの連番です。

25

1 行から検索値と同じ値のセルの位置を取得する

値の行から検索値と同じ エクセル のセルの位置を取得します。引数「一致モード」に 0 を指定して、引数「検索値」と同じ値を検索できます。

=MATCH(B5,$C$2:$E$2,0)

取得される値は、一番左のセルを基準とした 1 からの連番です。

33

特定の文字が入っているセルの位置を取得する

ワイルドカードを使用して ワード が入っているか検索して、そのセルの位置を取得します。

=MATCH("*ワード*",B3:B6,0)
=MATCH("ワード*",B3:B6,0)
=MATCH("*ワード",B3:B6,0)

名前が ワード で始まる値は "ワード*" のように入力します。

名前が ワード で終わる値は "*ワード" のように入力します。

26

見つからないときに 0 にする

検索結果が見つからないときに 0 を表示します。「IFERROR 関数」を使用して、エラーのときの値を表示できます。

=IFERROR(MATCH(B8,B3:B5,0),0)
=MATCH(B8,B3:B5,0)

MATCH 関数は検索結果が見つからないときにエラーになります。

27

値が基準値以下の最大値を検索する

基準値が 40 のとき、値が 40 以下の最大値のセルの位置を取得します。引数「一致モード」に 1 を指定して、引数「検索値」以下の最も近い値を検索できます。

=MATCH(B8,$B$3:$B$5,1)

日付ならその日以前の一番近い日付になります。

引数「検索範囲」が昇順に並べ替えられている必要があります。

28

値が基準値以上の最小値を検索する

基準値が 5 のとき、値が 5 以上の最小値のセルの位置を取得します。引数「一致モード」に -1 を指定して、引数「検索値」以上の最も近い値を検索できます。

=MATCH(B8,$B$3:$B$5,-1)

日付ならその日以降の一番近い日付になります。

引数「検索範囲」が降順に並べ替えられている必要があります。

29

高度な使い方

MATCH 関数と他の関数を組み合わせた使い方などを紹介します。

好きな列を検索して値を取得する

名前を検索して No. を取得します。「INDEX 関数」と MATCH 関数を組み合わせて、好きな列や行から検索できます。見出しでも検索できます。

365 または 2021 からは「XLOOKUP 関数」を使用します。
=INDEX($B$3:$E$5,MATCH(B8,$C$3:$C$5,0),1)
=XLOOKUP(B9,$C$3:$C$5,$B$3:$B$5)

VLOOKUP 関数」は左端の列からしか検索できません。

6
詳しくは「INDEX と MATCH 関数を組み合わせる」をご覧ください。

複数条件で検索する

名前とバージョンを検索して両方に一致するセルの位置を取得します。

検索専用の列を作成して、その中に名前とバージョンを区切り文字を付けて結合します。

=B3&","&C3
30

引数「検索値」に検索専用と同じように名前とバージョンを区切り文字を付けて結合した値を入力して、複数条件に対応できます。

365 または 2021 からは、検索専用の列を作成しないで「XMATCH 関数」を使用します。
=MATCH(B8&","&C8,B3:B5,0)
=XMATCH(B8&","&C8,C3:C5&","&D3:D5)
31

複数列、複数行から検索する

複数行または複数列から検索するには「IFERROR 関数」の中に MATCH 関数を入力します。見つからないでエラーになるときに次の行や列から検索できます。

2 列:
=IFERROR(MATCH(1 列目),MATCH(2 列目))
3 列:
=IFERROR(MATCH(1 列目),IFERROR(MATCH(2 列目),MATCH(3 列目)))

複数列から値が 40 のセルの位置を取得します。/p>

=IFERROR(MATCH(B8,$B$3:$B$5,0),MATCH(B8,$C$3:$C$5,0))
32

解説

引数を省略したり並べ替えなくても検索できる上位互換である「XMATCH 関数」があります。通常はそちらを使用します。

取得するセルの位置は引数「検索範囲」の一番左または一番上のセルを基準とした 1 からの連番です。10, 20, 30 の中から 20 を検索すると 2 が取得されます。

引数「検索範囲」に 1 行または 1 列だけ指定します。

引数「検索範囲」が複数の行列のときはエラー #N/A になります。

引数「検索値」が引数「検索範囲」から見つからないときはエラー #N/A になります。

文字列を検索するには、引数「一致モード」を 0 にします。一致する文字列を検索できます。

引数「一致モード」が 0 なら、文字列の大文字と小文字は区別しません。"ABC""abc" は等しいです。

引数「一致モード」が 0 なら、引数「検索値」にワイルドカードを使用できます。

引数「一致モード」が -1 のとき、引数「検索範囲」が降順に並べ替えられている必要があります。そうでないときは正しい結果を取得できません。

引数「一致モード」が 1 のとき、引数「検索範囲」が昇順に並べ替えられている必要があります。そうでないときは正しい結果を取得できません。

例えば、引数「検索値」が 2 なら、次の画像では 1, 10, 2, 20 の順で検索します。検索値より大きい値が見つかった時点で、それ以降の値は検索しません。昇順のときにそれ以降に一致する値はないからです。10 と比較したとき 2 より大きいのでこれ以降の値は検索されません。結果は 10 の 1 つ前のセルの位置を取得します。

=MATCH(B5,$B$2:$B$5,1)
18

MATCH と XMATCH の違い

MATCH 関数と「XMATCH 関数」の違いは引数「一致モード」の動作にあります。

  • MATCH 関数:引数「一致モード」を省略すると検索する値と同じまたは、それ以下の最大値と一致します。1 または -1 のとき、引数「検索範囲」が昇順や降順に並べられている必要があります。
  • XMATCH 関数:引数「一致モード」を省略すると検索する値と同じ値と一致します。1 または -1 のとき、引数「検索範囲」が並べ替えられている必要はありません。

XMATCH 関数」を使用できるバージョンならそちらを使用します。入力する引数が 1 つ少なくなります。

取得した位置の使い道

INDEX 関数」や「VLOOKUP 関数」のように、引数に列番号や行番号を入力する関数と組み合わせます。

XLOOKUP 関数」のように好きな列や行から検索するには「INDEX と MATCH 関数を組み合わせる」をご覧ください。