概要
「この値、許可リストの中に入ってる?」
「このコードは有効なコード?」
「この分類は、あらかじめ決めた候補の中にある?」
こういう “指定したリストの中に含まれているか” を判定したいときに便利なのが MATCH 関数です。
MATCH は本来「何番目にあるか(位置)」を返す関数ですが、
これを 「見つかったら有効」「見つからなかったら無効」 という判定に使うことで、
指定リスト内か判定 → MATCH
という形のテクニックになります。
MATCH の基本(まずは素の動き)
MATCH の書式と意味
基本形はこうです。
=MATCH(検索値, 検索範囲, [照合の種類])
よく使うのは「完全一致」のパターンで、照合の種類に 0 を指定します。
=MATCH(検索値, 検索範囲, 0)
動きはこうです。
検索値が検索範囲の中に見つかったら → その「位置(何番目か)」を返す
見つからなかったら → エラー(#N/A)を返す
例:
- 検索範囲:
{"A","B","C"} - 検索値:”B”
=MATCH("B", {"A","B","C"}, 0)
結果 → 2(2番目にある)
「見つかれば数字、見つからなければエラー」
この性質を「リスト内かどうか判定」に使います。
指定リスト内かどうかを TRUE / FALSE で判定する
IFERROR+MATCH で「リスト内/リスト外」を判定
許可リストが D2:D10 にあるとします。
A2 の値がこのリストの中にあるかどうかを判定したい場合。
まず、素の MATCH だとこうなります。
=MATCH(A2, $D$2:$D$10, 0)
A2 がリストの中にあれば「1〜9のどれかの数字」、
なければ #N/A というエラーです。
この「エラーかどうか」を IFERROR で包むと、
「リスト内なら TRUE、リスト外なら FALSE」といった判定に変換できます。
=IFERROR(MATCH(A2, $D$2:$D$10, 0) > 0, FALSE)
ポイントはここです。
- 見つかったとき:
MATCH → 1 以上の数値>0→ TRUE - 見つからなかったとき:
MATCH → #N/A(エラー)>0は評価できずエラーになるので、
IFERROR の第2引数 FALSE に置き換わる
結果として、
A2 がリスト内 → TRUE
A2 がリスト外 → FALSE
という「リスト内かどうかの判定」ができます。
「リスト内なら有効/リスト外なら無効」と表示する
判定結果を文字にするパターン
TRUE / FALSE のままだと少し分かりづらいので、
IF と組み合わせてラベルをつける形にするのが実務では定番です。
A2:判定したいコード
D2:D10:有効コードのリスト
=IF(
IFERROR(MATCH(A2, $D$2:$D$10, 0) > 0, FALSE),
"有効",
"無効"
)
中身を分解すると、
MATCH(A2, $D$2:$D$10, 0)で「位置」検索>0で「見つかったら TRUE」化- 見つからずエラーのときは IFERROR で FALSE に変換
- 最終的に TRUE →「有効」、FALSE →「無効」として表示
という流れです。
指定リスト内だけ計算する・拾う
リスト内なら金額を返し、リスト外なら 0 にする
A列:商品コード
B列:金額
D2:D10:対象とする商品コードのリスト
「D2:D10 に含まれる商品コードの行だけ B列の金額を集計したい」
というケースでは、C列などに次のような式を書けます。
=IF(
IFERROR(MATCH(A2, $D$2:$D$10, 0) > 0, FALSE),
B2,
0
)
リスト内のコード → B2(その金額)
リスト外のコード → 0
として扱えるので、C列を SUM すれば「指定リスト内の商品だけの合計」が出せます。
指定リスト外をエラーとしてあぶり出す
リスト外なら「不正コード」と表示する
入力されたコードが「許可リストにない場合だけ警告したい」
というときは、こんな書き方もできます。
A2:入力されたコード
D2:D10:許可コード
=IF(
IFERROR(MATCH(A2, $D$2:$D$10, 0) > 0, FALSE),
"",
"不正コード"
)
- 許可リスト内 → 空白(何も表示しない)
- 許可リスト外 → 「不正コード」と表示
後からフィルターで「不正コード」だけ抽出すれば、
おかしな値をすぐに洗い出せます。
MATCH を使うときの注意点
照合の種類は「0(完全一致)」を使う
リスト内かどうかを判定するときは、
必ず MATCH(..., 0) として「完全一致」にしてください。
1 や -1 を使うと「近い値」を拾う動きになってしまい、
「リストにないのに見つかったことになる」という危険があります。
余計なスペース・全角半角の違いに注意
MATCH は文字列を「完全一致」で見ます。
- “ABC” と “ABC “(末尾スペースあり)は別物
- “アイウ”(半角カナ)と “アイウ”(全角カナ)も別物
なので、「見つからない」ときは
入力ミス・余分なスペース・全角半角の違いなども疑ってみてください。
例題
問題1
A2 の値が、D2:D10 のリストの中に存在するかどうかを TRUE / FALSE で判定する式を書いてください。
(存在すれば TRUE、存在しなければ FALSE)
=IFERROR(MATCH(A2, $D$2:$D$10, 0) > 0, FALSE)
問題2
問題1と同じ前提で、
存在すれば「有効」、存在しなければ「無効」と表示する式を書いてください。
=IF(
IFERROR(MATCH(A2, $D$2:$D$10, 0) > 0, FALSE),
"有効",
"無効"
)
問題3
A2 に商品コード、B2 に金額が入っています。
D2:D10 に「集計対象の商品コードリスト」があるとき、
A2 がリスト内なら B2 の金額を返し、リスト外なら 0 を返す式を書いてください。
=IF(
IFERROR(MATCH(A2, $D$2:$D$10, 0) > 0, FALSE),
B2,
0
)
問題4
A2 に入力されたコードが D2:D10 の許可リストに存在しない場合だけ「不正コード」と表示し、
存在する場合は何も表示しない式を書いてください。
=IF(
IFERROR(MATCH(A2, $D$2:$D$10, 0) > 0, FALSE),
"",
"不正コード"
)
問題5
A2 の値が D2:D10 のリストの中で「何番目にあるか」を返す、基本的な MATCH の式を書いてください(完全一致)。
=MATCH(A2, $D$2:$D$10, 0)
まとめ
「指定リスト内か判定 → MATCH」は、
MATCH の「見つかれば数字、見つからなければエラー」という性質を利用して、
- MATCH で位置を探す
>0で「見つかったかどうか」を TRUE / FALSE に変換- 見つからない(エラー)のときは IFERROR で FALSE にする
という流れで成り立っています。
型としては、次の2つを押さえておけば十分です。
=IFERROR(MATCH(値, リスト範囲, 0) > 0, FALSE) ' リスト内か?(TRUE/FALSE)
=IF(
IFERROR(MATCH(値, リスト範囲, 0) > 0, FALSE),
"リスト内のとき",
"リスト外のとき"
)
ID・コード・分類・ランクなど、
「使っていい値はこれだけ」という場面では必ず役立つパターンなので、
自分のシートの“許可リスト”で、一度この MATCH 判定を試してみてください。
