MATCH関数は、検査範囲の中で探す値が何番目にあるかを数値で返す関数です。値そのものは取り出しません。実務では第3引数の照合の型に 0 を指定した完全一致が基本形。省略すると近似一致になり、エラーが出ないまま誤った位置が返ります。
この記事でわかること
- MATCH関数の3つの引数と、返ってくる数値の意味
- 照合の型
0・1・-1の違いと、並び順の前提 - MATCH単体の使いどころ(存在チェック・2つのリストの差分・段階判定)
#N/Aが出るときの原因と直し方- XMATCH関数・COUNTIF関数との使い分け
MATCH関数の構文と引数
構文
=MATCH(検査値, 検査範囲, [照合の型])
| 引数 | 指定するもの | 注意点 |
|---|---|---|
| 検査値 | 探したい値 | ワイルドカードが使えるのは照合の型が 0 のときだけ |
| 検査範囲 | 探す先のセル範囲 | 1行または1列で指定する |
| 照合の型 | 0=完全一致/1=以下の最大値/-1=以上の最小値 | 省略すると 1 扱い。実務では 0 を明示する |
返るのは範囲の中での位置です。検査範囲が $F$2:$F$100 で 3 が返ったなら、それはシートの4行目を意味します。シートの行番号がそのまま返るわけではありません。
MATCH関数はExcel 2016以降のどのバージョンでも使えます。動的配列のような世代差はありません。

基本の使い方
商品マスタのF列に商品コードが並んでいるとします。「A-102」が上から何番目かを数える式です。
=MATCH("A-102", $F$2:$F$100, 0)
条件を直接書かず、入力セルを参照させると使い回せます。
=MATCH($A2, $F$2:$F$100, 0)
検査範囲は必ず絶対参照にする
$F$2:$F$100 のようにドル記号で固定します。固定せずに下へコピーすると範囲が1行ずつ下へずれ、下の行ほど位置がずれた値を返します。範囲を入力した直後にF4キーを押すと切り替わります。
値そのものは返らない
MATCHが返すのは位置の数値だけです。「A-102の商品名」が欲しいなら、その数値を受け取って値を取り出す関数と組み合わせます。INDEX関数とセットで使うのが定番の形です。
ただし位置の数値だけで足りる用途も多く、その場合はMATCH単体で完結します。次の章がその使いどころです。
照合の型3つの違い
この関数のつまずきどころは、ほぼ第3引数に集中しています。
| 照合の型 | 探すもの | 検査範囲の並び順 |
|---|---|---|
0 | 検査値と完全に一致する値 | 不問(どんな並びでもよい) |
1(省略時) | 検査値以下の最大値 | 昇順に並んでいることが前提 |
-1 | 検査値以上の最小値 | 降順に並んでいることが前提 |
⛔ 省略すると静かに間違う
第3引数を省くと 1 として動きます。1 は範囲が昇順に並んでいることを前提に探すため、並んでいない表に対しては結果が当てになりません。
厄介なのは、#N/A にならずそれらしい数値が返ってくる点です。数式は動いているように見えるのに、取り出される値だけが違う。原因に気づくまで時間がかかる種類の事故なので、完全一致で使うなら 0 を必ず書いてください。
照合の型 1 が正しく効く場面
1 を使うのは、段階で判定したいときだけです。料金表・送料表・評価ランクのように「いくら以上ならこの区分」という表がこれに当たります。
E列に各段階の下限値を昇順で並べ、F列に区分名を置いた表を用意します。
=INDEX($F$2:$F$6, MATCH($B2, $E$2:$E$6, 1))
$E$2:$E$6 に 0 1000 5000 10000 50000 が入っていれば、B2が 7,200 のとき「5000以下の最大値」=3番目が選ばれ、F4の区分名が返ります。
⚠️ 1 は「検査値以下の最大値」を探すため、検査値が範囲の最小値より小さいと #N/A になります。段階表の先頭には必ず 0 などの下限を置いてください。
-1 は降順に並べた表で「以上の最小値」を探します。段階表を大きい順に作ってしまった場合に使いますが、昇順の 1 に統一するほうが読み手を迷わせません。

MATCH単体で使う4パターン
① 値があるかどうかを判定する
#N/A を返すかどうかで、存在チェックができます。
=ISNUMBER(MATCH($A2, $F$2:$F$100, 0))
マスタに存在すれば TRUE、なければ FALSE です。COUNTIF関数でも同じ判定はできますが、位置も一緒に欲しいならMATCH、件数だけでよいならCOUNTIFという分け方になります。
② 2つのリストの差分を出す
先月の名簿と今月の名簿を突き合わせ、増えた人・消えた人を洗い出す用途です。
=IF(ISNA(MATCH($A2, $F$2:$F$100, 0)), "新規", "継続")
同じ式を条件付き書式のルールに入れれば、差分の行に色を付けられます。逆向き(先月にいて今月にいない)も、範囲を入れ替えるだけで同じ形で書けます。
③ 表示する並び順を管理する
集計表を「マスタで決めた順」に並べたいとき、MATCHで並び順番号の列を作ります。
=MATCH($A2, $J$2:$J$10, 0)
J列に支店の正しい並びを置いておけば、この列を基準に並べ替えるだけで意図した順序になります。五十音順でも入力順でもない業務上の順番を保ちたい表で効きます。
④ 横方向に使って列番号を数える
MATCHは1行の範囲にも同じ形で使えます。見出し行を検査範囲にすると、「単価は左から何列目か」を毎回数え直せます。
=VLOOKUP($A2, $F$2:$H$100, MATCH($B$1, $F$1:$H$1, 0), FALSE)
列番号を数値で直書きした式は、マスタに列を1本挿入した瞬間に全部が別の列を指し始めます。MATCHに数えさせておけば、この事故が起きません。

うまくいかないときの原因と直し方
| 表示・症状 | 主な原因 | 直し方 |
|---|---|---|
#N/A | 検査値が検査範囲に存在しない | 下の「#N/Aの4つの原因」を上から確認する |
#N/A | 照合の型 1 で、検査値が範囲の最小値より小さい | 段階表の先頭に 0 などの下限を置く |
#N/A | 検査範囲を複数行×複数列で指定している | 検査範囲は1行または1列にする |
#VALUE! | 照合の型に数値以外を入れている | 0・1・-1 のいずれかにする |
| 誤った位置が返る(エラーなし) | 照合の型を省略している | 0 を明示して完全一致にする |
| 下の行ほど位置がずれる | 検査範囲が相対参照のままコピーされた | $F$2:$F$100 の形に固定する |
| 取り出した値が1行ずれる | 取得側の範囲と開始行が違う | 両方の範囲を同じ行で始め、同じ行で終える |
| 意図しない位置が返る | 検査値に * や ? が含まれていた | ~* ~? でエスケープする |
#N/Aの4つの原因
見た目が同じでも一致しないことがあります。次の順に確認するのが早道です。判定用の式も添えます。
- 検査値が存在しない —
=COUNTIF($F$2:$F$100, $A2)が0なら不在 - 前後に余分な空白がある —
=TRIM(A2)の結果と元の値を見比べる - 数値と文字列が混ざっている —
=ISNUMBER(A2)と=ISNUMBER(F2)の結果が食い違えば型の不一致 - 全角と半角が混ざっている —
=ASC(A2)で半角に寄せて比較する
3の型の不一致は、セルの左寄せ・右寄せでも見分けられます。数値は既定で右寄せ、文字列は左寄せです。
エラーを隠すなら IFNA
=IFNA(MATCH($A2, $F$2:$F$100, 0), "")
IFERROR関数でも隠せますが、#VALUE! のような設計ミスまで飲み込みます。「見つからない」だけを想定内として扱うなら、IFNAのほうが安全です。

似た関数との使い分け
| 関数・組み合わせ | 対応バージョン | 選ぶ場面 |
|---|---|---|
| MATCH | 2016〜 | 位置が欲しい。2016・2019の相手にも渡す |
| XMATCH | 365/2021〜 | 末尾から検索したい。一致の条件を細かく指定したい |
| INDEX+MATCH | 2016〜 | 位置から値を取り出す |
| COUNTIF | 2016〜 | 位置は要らず、件数だけ知りたい |
| XLOOKUP | 2021〜 | 位置を経由せず、1つの関数で値を引く |
| VLOOKUP | 2016〜 | 左端列で引くだけの単純な引き当て |
XMATCHとの違い
XMATCHは同じ「位置を返す関数」の後継です。違いは2つあります。
既定が完全一致であることが1つ目です。MATCHは省略時に近似一致へ倒れますが、XMATCHは省略しても完全一致で動きます。この記事で繰り返している事故が、そもそも起きません。
2つ目は末尾から検索できることです。第4引数で検索の向きを指定でき、同じ値が複数あるときに「最後の1件」を取れます。MATCHでこれを書くには別の工夫が要ります。
ただしXMATCHはMicrosoft 365とExcel 2021以降です。2019以前で開くと #NAME? になります。相手の環境が分からないファイルでは、MATCHのままにしておくのが安全です。
よくある質問
Q1:MATCH関数だけで値を取り出せますか?
取り出せません。MATCHが返すのは位置の数値だけです。値が欲しい場合はINDEX関数と組み合わせます。逆に、存在チェックや差分の判定のように位置の数値だけで完結する用途なら、単体で使えます。
Q2:照合の型を省略するとどうなりますか?
1(以下の最大値)として動きます。検査範囲が昇順に並んでいれば意図どおりですが、並んでいない表では見当違いの位置を返します。エラーにならず間違った値が返るのが最も厄介な点です。完全一致で使うなら 0 を必ず書いてください。
Q3:一致する値が複数あるとどうなりますか?
照合の型が 0 の場合、最初に一致した位置だけが返ります。2件目以降は取得できません。すべて必要ならFILTER関数(Excel 2021以降)を使うか、作業列に連番を振って「何件目か」を指定する形にします。
Q4:大文字と小文字、全角と半角は区別されますか?
大文字と小文字は区別されません。ABC と abc は同じ値として一致します。一方で全角と半角は別の文字として扱われ、一致しません。ASC関数やJIS関数で、あらかじめどちらかに寄せておくのが確実です。
Q5:「〇〇を含む」という条件で検索できますか?
できます。照合の型を 0 にしたうえで、"*"&$A2&"*" のようにアスタリスクで挟みます。? は任意の1文字です。* や ? そのものを探したいときは、直前に半角チルダ ~ を置きます。ワイルドカードが効くのは型が 0 のときだけです。
Q6:検査範囲に表全体を指定できますか?
できません。検査範囲は1行または1列で指定します。表全体から行と列の両方を特定したい場合は、MATCHを2本使い、縦方向と横方向でそれぞれ位置を出してINDEX関数に渡します。
まとめ
- 返るのは範囲内の位置。シートの行番号ではない
- 照合の型は必ず
0。省略すると近似一致になり、誤った位置が静かに返る - 型
1を使うのは段階判定のときだけ。昇順に並べ、先頭に下限を置く - 単体でも使える。存在チェック・差分抽出・並び順の管理が代表例
- 検査範囲は1行または1列。エラーを隠すならIFERRORよりIFNA
※関数の対応バージョンはExcelの一般提供時点の情報にもとづいています。お使いの環境や更新プログラムの適用状況により、利用できる関数や表示が異なる場合があります。

