概要
「一番少ない売上の行はどれ?」「最も点数が低い人は誰?」
こういう“最小値の行”を取りたいときに使う定番パターンが
INDEX + MATCH + MIN の組み合わせです。
やっていることは、最大値のときと同じで順番だけです。
- MIN で「一番小さい値」を求める
- MATCH で「その値がどの行にあるか(何番目か)」を探す
- INDEX で「その行の欲しい列」を取り出す
この「型」さえ覚えれば、どんな表でも「最小値の行」を簡単に引っ張ってこられます。
基本の考え方(MIN → MATCH → INDEX)
MIN で「最小値そのもの」を求める
たとえば、D2:D100 に「金額」や「点数」が入っているとします。
その中で一番小さい値は、こう書くだけで出ます。
=MIN(D2:D100)
でも欲しいのは「最小値はいくつか」ではなく、
「その最小値がある“行の情報”」ですよね。
そこで MIN の結果を MATCH に渡して、行位置を特定します。
MATCH で「最小値が何行目か」を求める
=MATCH(MIN(D2:D100), D2:D100, 0)
意味としては、
- MIN(D2:D100) で最小値を求める
- MATCH(最小値, D2:D100, 0) で
「D2:D100 の中で、その値が何番目に出てくるか」を返す
たとえば D2:D100 の 12行目(=D13)に最小値があれば、結果は 12 です。
この「12」が、あとで INDEX に渡す「行番号」になります。
INDEX で「その行の別の列」を取り出す
INDEX は
=INDEX(範囲, 行番号, [列番号])
という形で、範囲の中から「行×列」で値を取る関数でした。
例えば、A2:D100 に
- A列:商品コード
- B列:商品名
- C列:担当者
- D列:金額
が入っているとして、「金額が最小の行の“商品名”」を取りたい場合はこう書きます。
=INDEX(B2:B100, MATCH(MIN(D2:D100), D2:D100, 0))
流れを言葉にすると、
- MIN(D2:D100) で最小金額を出す
- MATCH(その最小金額, D2:D100, 0) で「何番目の行か」を求める
- INDEX(B2:B100, その行番号) で「同じ行の商品名」を返す
これが 「最小値の行を取得する基本形」 です。
最小値の行から複数列を取り出す
「最小金額の行」から、商品名だけでなく
商品コード・担当者なども一緒に取りたいことが多いですよね。
行番号だけ先にセルに出しておくパターン
まず、たとえば F1 に「最小値の行番号(位置)」を出します。
=MATCH(MIN(D2:D100), D2:D100, 0)
これで F1 に「範囲内での行番号(例:12)」が入ります。
あとは、この F1 を使って各列を INDEX で参照するだけです。
最小値の行の「商品コード」(A列)を G1 に表示:
=INDEX(A2:A100, $F$1)
最小値の行の「商品名」(B列)を H1 に表示:
=INDEX(B2:B100, $F$1)
最小値の行の「担当者」(C列)を I1 に表示:
=INDEX(C2:C100, $F$1)
「どの行が最小か」は F1 が覚えていてくれるので、
D列の値が変わって最小行が変わっても、G〜I列は自動で追従します。
1式で“最小値の行の任意の列”を取るテンプレ
行番号セルを使わずに、1つの式の中で完結させることもできます。
最小値の行の「商品名」を 1式で:
=INDEX(B2:B100, MATCH(MIN(D2:D100), D2:D100, 0))
最小値の行の「担当者」を 1式で:
=INDEX(C2:C100, MATCH(MIN(D2:D100), D2:D100, 0))
「INDEX の第2引数(行番号)に MATCH(MIN(…)) を入れる」
これが“最小値の行を取る型”です。
別シート・別表の「最小値の行」を取る
実務では「集計シートから、明細シートの最小行を参照する」ことが多いので、
別シート版も触れておきます。
別シートの最小金額の行から商品名を取得
Sheet「売上明細」
A2:A100:商品コード
B2:B100:商品名
C2:C100:担当者
D2:D100:金額
Sheet「集計」
B2 に「売上明細」シートで金額が最小の行の商品名を表示したい場合:
=INDEX(売上明細!B2:B100,
MATCH(MIN(売上明細!D2:D100),
売上明細!D2:D100,
0))
MIN も MATCH も INDEX も、すべて「売上明細」シートの範囲を見に行っているだけで、
考え方はまったく同じです。
条件付き「最小値の行」を取得する応用
「全体の中で最小」ではなく、
「担当者=佐藤 の中で最小金額の行」
のように、条件を絞ってから最小値を取りたいこともよくあります。
Microsoft 365 なら、FILTER を併用すると書きやすくなります。
前提:
A列:商品コード
B列:商品名
C列:担当者
D列:金額
F2:担当者名(例:佐藤)
条件を満たす行の中での最小値
まず「担当者=F2 の行」に絞った上で、その中の最小金額を求めます。
=MIN(FILTER(D2:D100, C2:C100=F2))
次に、その最小値が「元の D2:D100 の中で何番目の行か」を MATCH で求めます。
=MATCH(MIN(FILTER(D2:D100, C2:C100=F2)), D2:D100, 0)
最後に INDEX で、同じ行の「商品名」を取ります。
=INDEX(B2:B100,
MATCH(MIN(FILTER(D2:D100, C2:C100=F2)),
D2:D100,
0))
流れはこうです。
- FILTER(D2:D100, C2:C100=F2)
→ 担当者が F2 の行だけの金額を取り出す - その中で MIN を取る
- その最小値が D2:D100 の何行目か MATCH で探す
- INDEX で同じ行の B列(商品名)を返す
少し高度ですが、「条件付き最小値の行」を取るときの強いパターンです。
よくあるつまずきと注意点
MIN の範囲と MATCH の範囲を必ず揃える
悪い例:
=MATCH(MIN(D2:D100), D3:D100, 0)
MIN は D2:D100 を見ているのに、
MATCH は D3:D100 から探している → 位置がズレます。
良い例:
=MATCH(MIN(D2:D100), D2:D100, 0)
「MIN の範囲」と「MATCH の検索範囲」は同じにする、
これだけは必ず守ってください。
最小値が複数あるときは“最初の1つ”になる
D列に同じ最小値が複数あっても、
MATCH は「一番上にあるもの」の行番号を返します。
「全部の最小行が欲しい」場合は、
FILTER(D2:D100, D2:D100=MIN(D2:D100)) のような別アプローチが必要になります。
例題
問題1
A2:D100 に「商品コード, 商品名, 担当者, 金額」が入っています。
D列の金額が最小の行の「商品名」を F2 に表示する式を書いてください。
=INDEX(B2:B100, MATCH(MIN(D2:D100), D2:D100, 0))
問題2
同じ表で、D列の金額が最小の行の「商品コード」を G2 に表示する式を書いてください。
=INDEX(A2:A100, MATCH(MIN(D2:D100), D2:D100, 0))
問題3
A2:D100 に表があります。
まず H1 に「D列の最小値が何番目の行か」を求める式を書き、その結果を使って、
H2 に「最小値の行の担当者名(C列)」を表示する式を書いてください。
H1:
=MATCH(MIN(D2:D100), D2:D100, 0)
H2:
=INDEX(C2:C100, $H$1)
問題4
Sheet「売上明細」の A2:D100 に表があります(A=商品コード, B=商品名, C=担当者, D=金額)。
Sheet「集計」の B2 に、「売上明細」シートで金額が最小の行の商品名を表示する式を書いてください。
=INDEX(売上明細!B2:B100,
MATCH(MIN(売上明細!D2:D100),
売上明細!D2:D100,
0))
問題5
A2:D100 に表があります。F2 に担当者名(例:佐藤)が入っています。
「担当者が F2 の行の中で、金額が最小の行の“商品名”(B列)」を G2 に表示する式を書いてください
(FILTER, MIN, MATCH, INDEX を組み合わせてください)。
=INDEX(B2:B100,
MATCH(MIN(FILTER(D2:D100, C2:C100=F2)),
D2:D100,
0))
まとめ
「最小値の行を取得する」INDEX+MATCH+MIN の型は、たったこれだけです。
=INDEX(取りたい列,
MATCH(MIN(評価列), 評価列, 0))
- 取りたい列:商品名、コード、担当者など
- 評価列:金額、点数、在庫数など
この2つを入れ替えるだけで、
どんな表でも「一番小さい値の行の情報」をスマートに拾えます。
MAX パターンとセットで覚えておくと、
「ベスト(最大)」「ワースト(最小)」の行を自在に抜き出せるようになり、
集計表やランキング系のシートが一気にパワーアップします。
