MATCH関数の使い方・読み方|値が上から何番目にあるかを調べる

執筆者:

カテゴリ:

MATCH関数の使い方・読み方のイメージ

検索・参照

MATCH関数の使い方・読み方

Excel関数辞典

読み方:MATCH は「マッチ」と読みます。(一般的な読み方です。公式に読み仮名の定めはありません)

MATCHは、指定した値が範囲の何番目にあるかを返す関数です。値そのものではなく「位置」を返すのが特徴です。

使える環境Excel○Googleスプレッドシート○
このページの中身(21項目)
  1. 書式
  2. 基本の使い方
  3. INDEXと組み合わせる
  4. VLOOKUPの列番号を動的にする
  5. 第3引数を省略してはいけない理由
  6. 重複チェックに使う
  7. エラーの対処
  8. 第三引数を省略したときに何が起きるか
  9. 探せない原因を切り分ける
  10. 列番号を動的にする
  11. 重複を調べるのに使う
  12. 二つのリストを突き合わせる
  13. 検索の位置を再利用する
  14. 「検索・参照」の関数を全体から見る
  15. 数式を書く前の手順
  16. どの関数でも共通する確認
  17. 引き継ぐときに残すこと
  18. このサイトの収録状況
  19. よくある質問
  20. まとめ
  21. 関連する関数

この記事の書式と対応環境の出どころ(2026-08-26 確認)

関数の仕様は追加・変更されることがあります。書式が合わないときは、上の公式ページで最新をご確認ください。

単体で使うことは少なく、INDEX や VLOOKUP と組み合わせて力を発揮します。

MATCH関数の使い方の記事構成図
MATCH関数の使い方:この記事で扱う内容

書式

=MATCH(検索キー, 検索範囲, [検索の型])
引数内容
検索キー探したい値
検索範囲探しに行く範囲。1列または1行だけ
検索の型0=完全一致 / 1=以下の最大値 / -1=以上の最小値

第3引数は、基本は 0 を書いてください

省略すると 1(近似一致)になり、事故のもとになります。点数から評価ランクを求めるような段階表を引くときだけ 1 を使います。理由は後述します。

基本の使い方

A
1東京
2大阪
3名古屋
4福岡
=MATCH("名古屋", A1:A4, 0)   → 3

「名古屋」は範囲の上から3番目にあるので 3 が返ります。A3セルという意味ではなく、範囲の中での順番である点に注意してください。範囲を A2:A4 にすれば、同じ「名古屋」でも結果は 2 になります。

横方向の範囲でも同じように動きます。

=MATCH("5月", A1:M1, 0)   → 6
MATCH関数の使い方の要点図
MATCH関数の使い方

INDEXと組み合わせる

MATCHの最も一般的な使い道です。

=INDEX(B2:B10, MATCH("B-201", A2:A10, 0))

MATCHで「A列の何番目か」を求め、INDEXでB列の同じ位置を取り出します。これで VLOOKUP と同じ検索ができ、しかも左方向にも検索できます。詳しくは INDEX のページで解説しています。

VLOOKUPの列番号を動的にする

VLOOKUPの列番号を数字で直接書くと、列を挿入したときに壊れます。MATCHで求めれば壊れません。

=VLOOKUP($E2, $A:$D, MATCH(F$1, $A$1:$D$1, 0), FALSE)

見出し行から「取り出したい列が何番目か」を計算しているため、列の順番が変わっても追従します。横方向にコピーして複数項目を一度に引くときに特に有効です。

第3引数を省略してはいけない理由

省略すると 1(検索キー以下の最大値を探す)になります。このモードは範囲が昇順に並んでいる前提で動きます。

先ほどの都市名リストで =MATCH("札幌", A1:A4) とすると、「札幌」は存在しないのにエラーにならず、何らかの数字が返ります。並び順が昇順でないため結果は予測できません。間違いに気づけないのが最大の問題です。

近似一致には「点数から評価ランクを求める」といった正当な用途もありますが、段階表を引く意図がないなら 0 を明示してください。

重複チェックに使う

MATCHは最初に見つかった1件の位置を返します。この性質を使うと、重複の検出ができます。

=IF(MATCH(A2, A:A, 0) = ROW(A2), "初出", "重複")

「自分の行番号」と「最初に見つかった位置」が一致していれば初出、ずれていれば2件目以降=重複、という判定です。列全体を範囲にしているので、位置と行番号が一致する点を利用しています。

単に重複の有無を数えるだけなら COUNTIF のほうが簡単です。

=IF(COUNTIF(A:A, A2) > 1, "重複あり", "")

エラーの対処

#N/A が出る

見つからなかった、という意味です。原因はほぼ次のどれかです。

表記ゆれ・余分なスペース

「東京」と「東京 」は別物です。疑わしいときは TRIM で囲みます。

=MATCH(TRIM(E2), A:A, 0)

数値と文字列の食い違い

101(数値)と "101"(文字列)は一致しません。片方が左寄せ、片方が右寄せになっていたらこれです。

第3引数を省略している

昇順でない範囲で近似一致モードが働き、期待した結果になっていません。

見つからないケースを許容するなら IFERROR で包みます。

=IFERROR(MATCH(E2, A:A, 0), "")

結果がINDEXと1つずれる

MATCHの範囲とINDEXの範囲で、開始行が揃っていないのが原因です。MATCHを A1:A10、INDEXを B2:B10 にすると必ず1つずれます。両方を同じ行から始めてください。


第三引数を省略したときに何が起きるか

MATCHでもっとも事故が多いのが、第三引数の省略です。この引数は照合の種類を指定するもので、省略すると近似一致になります。近似一致は、範囲が昇順に並んでいることを前提に、指定した値以下の最大値の位置を返します。

問題は、範囲が昇順に並んでいない場合です。この場合でもエラーにはならず、もっともらしい数字が返ります。何番目かという答えが返ってくるので、一見すると正しく動いているように見えます。しかし実際には、まったく関係のない行の位置が返っていることがあります。

INDEXと組み合わせている場合、この誤りは連鎖します。MATCHが誤った位置を返し、INDEXがその位置の値を返すので、結果として無関係な値が表示されます。それでもエラーは出ません。検算をしていなければ、間違いに気づかないまま使い続けることになります。

対処は単純で、完全一致を意味するゼロを必ず書くことです。書き忘れを防ぐには、MATCHを書くときは常に三つの引数を書くと決めてしまうのが確実です。近似一致が本当に必要な場面、たとえば料金区分の判定などでは、意図して指定すればよいだけです。

逆順に並んだ範囲に対して、指定した値以上の最小値を探すモードもあります。使う場面は限られますが、降順の表を扱うときには必要になります。


探せない原因を切り分ける

MATCHが該当なしのエラーを返すとき、原因は限られています。順に確かめれば必ず見つかります。

最初に疑うのは、値の型です。見た目が同じでも、片方が文字列で片方が数値なら一致しません。他のシステムから貼り付けたデータでは頻繁に起こります。表示が左寄せなら文字列、右寄せなら数値というのが既定の挙動なので、まずそこを見てください。

次に疑うのは、前後の空白です。末尾に半角スペースが入っているだけで一致しなくなります。人の目にはまったく同じに見えるため、これがもっとも気づきにくい原因です。文字数を数えれば一目で分かります。

三つ目は、改行の混入です。フォームの回答やメールから貼り付けたデータには、セルの中に改行が入っていることがあります。セルの高さが妙に高い場合は疑ってください。

四つ目は、範囲の指定です。探したい値が範囲の外にあれば、当然見つかりません。範囲を絶対参照で固定し忘れていて、下にコピーするうちに範囲がずれている、というのもよくあるパターンです。

五つ目は、第三引数の指定漏れです。完全一致を指定していないために、意図しない挙動になっている可能性があります。

この五つを順に潰せば、原因は特定できます。当てずっぽうで数式を書き換えるより、確実に早く終わります。


列番号を動的にする

MATCHの実務的な使い道として、VLOOKUPの列番号を自動化する方法があります。VLOOKUPの第三引数に固定の数字を書いていると、表の列を挿入したときに参照先がずれます。ここをMATCHで置き換えると、見出しの名前で列を探すようになるため、列の位置が変わっても壊れません。

具体的には、見出し行を範囲としてMATCHで探し、返ってきた位置をVLOOKUPの列番号に渡します。数式は長くなりますが、保守の手間は明らかに減ります。マスタの列構成が変わる可能性があるなら、最初からこの形で書いておく価値があります。

同じ考え方で、INDEXの行番号と列番号を両方MATCHで求めれば、二次元の検索ができます。行の見出しと列の見出しから、交差する位置の値を取り出す形です。集計表から特定の値を引っ張ってくるときの定番になっています。

さらに応用として、複数の列のうち条件に合うものを選ぶ、という使い方もできます。月ごとの列が並んだ表から、指定した月の列だけを対象に集計する、といった処理です。


重複を調べるのに使う

MATCHは、値が存在するかどうかの判定にも使えます。該当があれば数字が返り、なければエラーが返るという性質を利用します。

ISNUMBER関数で包めば、存在するかどうかが真偽値で返ります。これをIFの条件にすれば、リストに含まれているかどうかで処理を分けられます。二つのリストを突き合わせて、片方にしかない項目を洗い出す、という作業がこれでできます。

COUNTIFでも同じことができますが、違いがあります。COUNTIFは件数を数えるので、範囲全体を走査します。MATCHは最初に見つかった時点で止まります。行数が非常に多い場合、MATCHのほうが速くなることがあります。

一方で、何件あるかを知りたい場合はCOUNTIFが適しています。存在の有無だけならMATCH、件数まで必要ならCOUNTIF、という使い分けになります。

なお、MATCHは最初に見つかった位置しか返しません。同じ値が複数ある場合、二件目以降の位置は分かりません。全件の位置を知りたい場合は、別の方法を考える必要があります。


二つのリストを突き合わせる

実務でよく発生するのが、二つの一覧を突き合わせて差分を見つける作業です。名簿の照合、在庫と台帳の確認、送付先の重複チェック。位置を求める関数がそのまま使えます。

考え方は単純で、片方の一覧の各行について、もう片方に存在するかを判定します。存在すれば位置が返り、なければ該当なしのエラーが返ります。この性質をそのまま利用します。

エラーかどうかを判定する関数で包めば、真偽値になります。これを作業列に出せば、片方にしかない項目が一目で分かります。

両方向で確認してください。Aにあってbにないもの、Bにあってaにないもの。片方だけ見ても、全体の差分は分かりません。

突き合わせの精度は、キーの整備で決まります。前後の空白、全角と半角、表記のゆれ。これらが揃っていないと、実際には同じものが別扱いになります。突き合わせる前に、両方の一覧を整形してください。

複数の項目で照合する場合は、それらを連結したキーを作ります。氏名だけでは同姓同名が区別できませんが、氏名と生年月日を連結すれば精度が上がります。

差分が見つかったら、どちらが正しいかを判断する必要があります。この判断は業務のルールによるので、機械的には決められません。差分の一覧を出すところまでが数式の役割です。


検索の位置を再利用する

同じ検索を複数の列で繰り返している場合、位置を一度求めて使い回すほうが効率的です。

位置を求める列を一本作り、各行でその位置を求めます。以降の列は、その位置を使って値を取り出すだけです。検索の処理が一回で済むので、行数が多い表では速度に差が出ます。

読みやすさの面でも利点があります。検索の部分と取り出しの部分が分かれるので、どこで失敗しているかが分かります。位置の列がエラーになっていれば検索の問題、位置は正しいのに値がおかしければ取り出しの問題です。

位置の列は非表示にできるので、表の見た目を損ないません。

同じ考え方で、条件の判定も一度だけ行って使い回せます。複数の場所で同じ条件を書いているなら、作業列にまとめてください。条件が変わったときの修正も一箇所で済みます。

処理を分けて中間結果を持つ、という発想は、表計算全般で有効です。一本の長い数式より、短い数式を段階的に並べたほうが、速く、読みやすく、直しやすくなります。

「検索・参照」の関数を全体から見る

検索・参照に含まれる関数を、全体から見ておきます。同じカテゴリの関数は、つまずく場所も似ています。この記事のほかに16本あります。

記事
ADDRESS
CHOOSE
COLUMN
COLUMNS
HLOOKUP
IMPORTDATA
IMPORTHTML
IMPORTRANGE
INDEX
INDIRECT
OFFSET
ROW
ROWS
VLOOKUP
XLOOKUP
XMATCH

このカテゴリで共通するつまずき

検索値の型と前後の空白で結果が変わります。掃除を先に済ませてください。1つで理解した内容は、同じカテゴリの他の関数にもそのまま使えます。

どれを使うかの決め方

検索列が左端にあるか、返したい列が複数あるかで使う関数が決まります。関数の一覧を眺めて選ぼうとすると、どれも当てはまるように見えて決まりません。

迷ったときは

→ 全関数の一覧 に目的別の索引があります。


数式を書く前の手順

手順を分けると、どこで詰まっているかが分かります。

1. 出したい結果を一文で書く

「何を、どの条件で、どんな形で出したいか」。この一文が書ければ、関数はほぼ決まります。書けないなら、まだ要件が固まっていません。

2. 元データの型を確認する

検索値の型と前後の空白で結果が変わります。掃除を先に済ませてください。=ISNUMBER(A2) で数値かどうかを確認できます。見た目が同じでも、数値と文字列は別物です。

3. 空欄と0の扱いを決める

未入力なのか、実績が0なのか。表の意味が変わります。どちらとして扱うかを決めてから書いてください。

4. 条件の数を数える

検索列が左端にあるか、返したい列が複数あるかで使う関数が決まります。将来条件が増える可能性があるなら、最初から複数条件に対応する形にしてください。

5. 共有先の環境を確認する

新しい関数は、古い環境で開くとエラーになります。社外に渡すファイルでは、この一点で選択肢が変わります。

6. 1行だけ書いて確認する

全行にコピーする前に、1行分の結果が正しいかを見てください。間違ったまま広げると、直す手間が増えます。


どの関数でも共通する確認

以下は、どの関数を使っていても同じです。

参照を固定したか

下方向にコピーする数式では、動いてはいけない参照を固定します。上の数行だけ見て判断しないでください。ずれは下のほうで表面化します。

範囲の行数が揃っているか

複数の範囲を渡す関数では、行数がずれると結果が狂います。エラーにならず値が返るため、気づきにくい種類の間違いです。

型が揃っているか

=ISNUMBER(A2)

数値として入っているかを判定します。システムから書き出したデータでは、これが原因のことが多くあります。

前後に空白が入っていないか

=LEN(A2)&" / "&LEN(TRIM(A2))

数が違えば、余分な空白が入っています。見た目では判別できません。

別の方法で検算したか

同じ数字を別の関数でも出して、突き合わせてください。1つの結果だけを見ても、正しいかどうかは判断できません。

最終行まで確認したか

一番下までスクロールして、結果を見てください。途中から値が変わっていないかを確認します。


引き継ぐときに残すこと

数式は動いていても、意図は残りません。渡す前に、次の点をシート内にメモしてください。3分で終わります。

何を出している数式か

一行で構いません。読めば分かると思っても、数か月後の自分には分かりません。

どの表を参照しているか

参照先のシート名と、更新の担当。別ファイルなら、その場所も書いてください。

該当しないときの扱い

空欄にしているのか、文言を出しているのか、エラーのまま残しているのか。書いていないと、受け取った側は空欄をデータなしと読みます。

触ってはいけない場所

列を挿入すると壊れる数式がある場合、必ず書き残してください。この一行があるだけで、引き継ぎ後の事故が大きく減ります。

使った関数の対応環境

新しい関数を使っている場合、古い環境では開けません。共有の範囲が広がる可能性があるなら、明記してください。

確定した期間は値にする

締めた月の集計は、値貼り付けにしてください。参照元を消しても壊れなくなり、ファイルも軽くなります。

このサイトの収録状況

全201本を、次のカテゴリに分けて収録しています。

カテゴリ記事数
目的別51本
集計47本
文字列31本
日付19本
検索・参照15本 ←この記事
条件15本
機能12本
配列・抽出10本
関数一覧1本

探し方の順番

関数名が分かっているなら検索窓から。やりたいことだけ決まっているなら「目的別」から。近い関数を比べたいなら、同じカテゴリの一覧から入ってください。

記事の構成

どの記事も、書式・実例・つまずきやすいところ・似た関数との使い分けを同じ順番で並べています。1本読めば、他の記事も同じ場所を探せます。


よくある質問

Q. 返ってくる数字は行番号ですか

シートの行番号ではなく、指定した範囲の中での順番です。範囲が二行目から始まるなら、一が返れば二行目という意味になります。

Q. 大文字と小文字は区別されますか

区別されません。区別したい場合はEXACT関数と組み合わせる必要があります。

Q. 部分一致で探せますか

第三引数を完全一致にした場合、ワイルドカードが使えます。前方一致や部分一致で位置を探すことができます。

Q. 該当なしのエラーを消したいのですが

IFERRORで包むか、IFNAで包みます。IFNAは該当なしのエラーだけを対象にするので、他のエラーは隠れません。

Q. 範囲は複数列でもいいですか

MATCHの範囲は一行または一列である必要があります。複数行かつ複数列の範囲を渡すとエラーになります。

Q. 逆から探せますか

標準ではできません。範囲を逆順にした作業列を作るか、他の関数と組み合わせる必要があります。

Q. INDEXと組み合わせると重くなりますか

範囲を適切に絞っていれば問題ありません。列全体を指定していると、行数の多いシートでは負荷がかかります。

Q. XMATCHという関数があると聞きました

MATCHの後継にあたる関数で、逆方向の検索やワイルドカードの指定がしやすくなっています。使える環境なら、そちらのほうが書きやすくなります。



まとめ

  • 書式は =MATCH(検索キー, 検索範囲, 0)
  • 返るのは値ではなく範囲の中での位置
  • 第3引数の 0 は必ず書く
  • INDEX + MATCH で柔軟な検索が組める
  • VLOOKUPの列番号を動的にするのにも使える

関連する関数