Excel関数 逆引き集 | 最小値の行を取得 → INDEX+MATCH(MIN)

Excel VBA Excel
スポンサーリンク

概要

「一番少ない売上の行はどれ?」「最も点数が低い人は誰?」
こういう“最小値の行”を取りたいときに使う定番パターンが
INDEX + MATCH + MIN の組み合わせです。

やっていることは、最大値のときと同じで順番だけです。

  1. MIN で「一番小さい値」を求める
  2. MATCH で「その値がどの行にあるか(何番目か)」を探す
  3. 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))

流れを言葉にすると、

  1. MIN(D2:D100) で最小金額を出す
  2. MATCH(その最小金額, D2:D100, 0) で「何番目の行か」を求める
  3. 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))

流れはこうです。

  1. FILTER(D2:D100, C2:C100=F2)
    → 担当者が F2 の行だけの金額を取り出す
  2. その中で MIN を取る
  3. その最小値が D2:D100 の何行目か MATCH で探す
  4. 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 パターンとセットで覚えておくと、
「ベスト(最大)」「ワースト(最小)」の行を自在に抜き出せるようになり、
集計表やランキング系のシートが一気にパワーアップします。

タイトルとURLをコピーしました