概要
「一致する値が複数あるとき、n番目の一致だけ取りたい」
こういう場面は、名簿・売上履歴・ログデータなどでよくあります。
Microsoft 365 なら、FILTER で一致する行を全部取り出し、SMALL で n番目を指定するという方法が最もシンプルで強力です。
- FILTER → 条件に合う値を“全部”抽出
- SMALL → 抽出された値の中から「n番目に小さい値」を返す
この組み合わせで「n番目の一致」を簡単に取得できます。
基本の考え方
1. FILTER で一致する値をすべて抽出
例:A2:A100 の中から「F2 と一致する値」だけを取り出す
=FILTER(A2:A100, A2:A100=F2)
これで「一致した値の一覧」が返ってきます。
2. SMALL で n番目を指定
FILTER の結果は配列なので、SMALL で n番目を取り出せます。
=SMALL(FILTER(A2:A100, A2:A100=F2), n)
n に 1 を入れれば「1番目の一致」、
n に 2 を入れれば「2番目の一致」になります。
具体例(数値の n番目一致)
A列に売上金額、F2 に検索したい金額、G2 に n(順位)が入っている場合
=SMALL(FILTER($A$2:$A$100, $A$2:$A$100=$F$2), G2)
- FILTER が「一致した売上金額の一覧」を返す
- SMALL がその中から「G2 番目に小さい値」を返す
→ 結果として「n番目の一致値」が取得できる
文字列の n番目一致を取りたい場合
文字列は SMALL では扱えないため、行番号を使う方法が定番です。
行番号を使った n番目一致(文字列対応)
=INDEX($A$2:$A$100,
SMALL(FILTER(ROW($A$2:$A$100)-ROW($A$2)+1, $A$2:$A$100=F2), G2))
ポイントをかみ砕くと:
ROW($A$2:$A$100)-ROW($A$2)+1
→ A2:A100 を「1,2,3,…」という連番に変換- FILTER で「一致した行番号だけ」を抽出
- SMALL で「n番目の行番号」を取得
- INDEX でその行の値を返す
これで文字列でも「n番目の一致」が取れます。
応用テンプレート
n番目の一致する“行番号”を返す
=SMALL(FILTER(ROW(A2:A100), A2:A100=F2), G2)
n番目の一致する“行全体”を返す(複数列)
A2:D100 の中で「商品名(C列)が F2 と一致する n番目の行」を返す:
=INDEX($A$2:$D$100,
SMALL(FILTER(ROW($A$2:$A$100)-ROW($A$2)+1, $C$2:$C$100=F2), G2),
SEQUENCE(1,4))
- SEQUENCE(1,4) → 4列分をまとめて返す
- FILTER+SMALL → n番目の行番号を取得
よくあるつまずきと対策
一致が n件未満だとエラーになる
例:一致が2件しかないのに、n=3 を指定すると #NUM! になります。
ユーザーに優しくするなら IFERROR を使います。
=IFERROR(
SMALL(FILTER(A2:A100, A2:A100=F2), G2),
"該当なし"
)
FILTER の範囲と条件範囲は必ず同じ行数にする
例:A2:A100 を抽出するなら、条件も A2:A100 で揃えること。
ずれると配列エラーになります。
文字列は SMALL で扱えない
文字列の n番目一致は必ず「行番号を SMALL で取る → INDEX で値を返す」という流れになります。
例題
問題1: A2:A100 に売上金額があります。F2 の金額と一致する値のうち「1番目の一致」を G2 に表示してください。
=SMALL(FILTER(A2:A100, A2:A100=F2), 1)
問題2: A2:A100 に売上金額、F2 に金額、G2 に n が入っています。n番目の一致値を H2 に表示してください。
=SMALL(FILTER(A2:A100, A2:A100=F2), G2)
問題3: A2:A100 に商品名(文字列)が入っています。F2 の商品名と一致する「n番目の一致」を G2 に表示してください。
=INDEX($A$2:$A$100,
SMALL(FILTER(ROW($A$2:$A$100)-ROW($A$2)+1, $A$2:$A$100=F2), G2))
問題4: C列の商品名が F2 と一致する「n番目の行番号」を H2 に表示してください。
=SMALL(FILTER(ROW(C2:C100), C2:C100=F2), G2)
問題5: A2:D100 の表から、「商品名(C列)が F2 と一致する n番目の行全体」を I2 に表示してください。
=INDEX($A$2:$D$100,
SMALL(FILTER(ROW($A$2:$A$100)-ROW($A$2)+1, $C$2:$C$100=F2), G2),
SEQUENCE(1,4))
まとめ
n番目の一致を取るときの基本パターンは次の2つです。
数値の n番目一致
=SMALL(FILTER(範囲, 条件), n)
文字列の n番目一致
=INDEX(範囲, SMALL(FILTER(行番号配列, 条件), n))
この2つを覚えておけば、
「n番目の売上」「n番目の一致する商品」「n番目の該当行」など、
実務でよくある“複数一致の中から順位を取る”処理がすべて書けるようになります。
