Excel関数 逆引き集 | 下位n件を抽出 → SMALL

Excel VBA Excel
スポンサーリンク

概要

「売上が少ない順に下位3件を出したい」
「点数の低い人ベスト5を出したい」
「エラーや不良数が多い“ワーストn件”を抜き出したい」

こういう“下位n件”を取るときの基本になるのが SMALL(スモール)関数です。

SMALL は
「範囲の中から、下から n 番目に小さい値を返す」
関数です。

これを縦にコピーしたり、INDEX+MATCH などと組み合わせることで、
「下位n件の値」や「下位n件の行情報」が簡単に取れるようになります。


SMALL の基本

SMALL の書式とイメージ

=SMALL(範囲, n)

範囲
順位を付けたい数値の集合(点数、売上、金額、所要時間など)

n
小さいほうから何番目か
1 → 最小値(1位:一番小さい値)
2 → 下から2番目に小さい値
3 → 下から3番目に小さい値…

例:D2:D10 に点数が入っているとします。

=SMALL(D2:D10, 1)   ' 最小値
=SMALL(D2:D10, 2)   ' 2番目に小さい値
=SMALL(D2:D10, 3)   ' 3番目に小さい値

「LARGE が上位(大きい順)、SMALL が下位(小さい順)」と覚えておくと整理しやすいです。


下位n件の「値」だけを抽出する

n を固定して下位n件を出す基本パターン

例:D2:D10 に点数が入っていて、
下位3件の点数を F2:F4 に表示したいとします。

単純に書くなら、

F2:

=SMALL(D2:D10, 1)

F3:

=SMALL(D2:D10, 2)

F4:

=SMALL(D2:D10, 3)

と、n だけ変えて書けばOKです。

ROW を使って「n を自動で増やす」パターン

毎回 n を手書きする代わりに、行番号を使って自動で増やすこともできます。

F2 に次の式を書いて、F4 まで下にコピーします。

=SMALL($D$2:$D$10, ROW(A1))

ROW(A1) は 1、
F3 行では ROW(A2) が 2、
F4 行では ROW(A3) が 3 になるので、

F2 → 下位1件目(最小)
F3 → 下位2件目
F4 → 下位3件目

というふうに、「コピーするだけで下位n件」が自動で並びます。


下位n件の「名前」や「商品」をセットで抜き出す

INDEX+MATCH+SMALL の基本パターン

実務で知りたいのは「値そのもの」よりも、
「値が小さい人の名前」「売上が少ない商品の名前」のほうですよね。

こういうときに使うのが
INDEX(値を取り出す)+MATCH(行番号を探す)+SMALL(順位づけ)
の組み合わせです。

前提:
A2:A10:名前
B2:B10:科目
C2:C10:点数

点数が低い順に、下位3名の「名前」を E2:E4 に表示したいとします。

1位(最小点の人)の名前を E2 に表示する式:

=INDEX($A$2:$A$10,
       MATCH(SMALL($C$2:$C$10, 1), $C$2:$C$10, 0))

意味をかみ砕くと、

  1. SMALL($C$2:$C$10, 1) で「一番低い点数」を求める
  2. MATCH(その点数, $C$2:$C$10, 0) で「その点数が C列の何行目か」を探す
  3. INDEX($A$2:$A$10, その行番号) で「対応する名前」を返す

これで「最低点の人の名前」が取れます。

2番目・3番目に点数が低い人も、SMALL の n だけ変えればOKです。

E3:

=INDEX($A$2:$A$10,
       MATCH(SMALL($C$2:$C$10, 2), $C$2:$C$10, 0))

E4:

=INDEX($A$2:$A$10,
       MATCH(SMALL($C$2:$C$10, 3), $C$2:$C$10, 0))

下位n件を「1つの式をコピーするだけ」で出す

ROW を使って n を自動化する

毎回 1,2,3… と書くのは面倒なので、
ROW を使って n を自動増加させる方法が便利です。

先ほどの例の続きで、
E2 に1つだけ式を書き、E4 までコピーして使いたいとします。

E2 に次の式を書きます。

=INDEX($A$2:$A$10,
       MATCH(SMALL($C$2:$C$10, ROW(A1)), $C$2:$C$10, 0))

動き:

  • E2:ROW(A1)=1 → 下位1件目(最小点の人)
  • E3:ROW(A2)=2 → 下位2件目
  • E4:ROW(A3)=3 → 下位3件目

という具合に、コピーするだけで「下位1〜n位」の名前を自動で取れます。

この「ROW(A1) を n の代わりに使う」パターンは、
上位(LARGE)でも下位(SMALL)でも共通してよく使う定番テクニックです。


下位n件を「行ごと」抽出する考え方

1件ぶんを行単位で取るイメージ

たとえば、A2:D10 に

A列:商品コード
B列:商品名
C列:担当者
D列:売上

が入っていて、
売上が少ない順に下位3件の「行全体」を別表に出したいとします。

1件目(売上が最小の行)の「商品名」を E2 に表示する式は、先ほどと同じ形です。

=INDEX($B$2:$B$10,
       MATCH(SMALL($D$2:$D$10, 1), $D$2:$D$10, 0))

同じ行の「商品コード」「担当者」も取りたい場合は、
INDEX の第1引数(取りたい列)だけを A列・C列に変えればOKです。

売上最小の行の「商品コード」を F2 に表示:

=INDEX($A$2:$A$10,
       MATCH(SMALL($D$2:$D$10, 1), $D$2:$D$10, 0))

売上最小の行の「担当者」を G2 に表示:

=INDEX($C$2:$C$10,
       MATCH(SMALL($D$2:$D$10, 1), $D$2:$D$10, 0))

下位2件目・3件目ぶんも欲しければ、
SMALL の n を ROW(A1), ROW(A2), ROW(A3)…で動かしていけば良い、という考え方になります。


よくあるつまずきと注意点

SMALL は数値専用

SMALL の対象は「数値」だけです。
文字列や空白が混ざっていると、意図しない結果になることがあります。

「空白を除外したい」「0を除外したい」などの要望がある場合は、

  • 先に FILTER などで絞り込む
  • 条件付きで別列に数値だけをコピーしてから SMALL をかける

といった工夫が必要になることがあります。

同じ値が複数ある場合(同率順位)

例えば点数が
60, 70, 70, 80

のとき、

SMALL(範囲,1) = 60
SMALL(範囲,2) = 70
SMALL(範囲,3) = 70

のように、「同じ値」を複数回返します。
同率の人も下位扱いでよければ問題ありませんが、
「同じ値は1つとして扱いたい」場合は、UNIQUE と組み合わせる必要が出てきます。


例題

問題1

D2:D10 に不良件数が入っています。
この中から「最小の不良件数(下位1件目)」を E2 に表示する式を書いてください。

=SMALL(D2:D10, 1)

問題2

D2:D10 の中から「下位3件の不良件数」を E2:E4 に表示したいとします。
E2 に1つだけ式を書き、下にコピーして使えるようにしてください。

=SMALL($D$2:$D$10, ROW(A1))

問題3

A2:A10 に名前、C2:C10 にテストの点数が入っています。
点数が最も低い人の名前を E2 に表示する式を書いてください。

=INDEX(A2:A10,
       MATCH(SMALL(C2:C10, 1), C2:C10, 0))

問題4

A2:A10 に名前、C2:C10 に点数が入っています。
点数が低い順に下位3人の名前を E2:E4 に表示したいとします。
E2 に1つだけ式を書き、下にコピーして使えるようにしてください。

=INDEX($A$2:$A$10,
       MATCH(SMALL($C$2:$C$10, ROW(A1)), $C$2:$C$10, 0))

問題5

A2:A10 に商品名、D2:D10 に売上金額が入っています。
売上が2番目に小さい商品の名前を F2 に表示する式を書いてください。

=INDEX(A2:A10,
       MATCH(SMALL(D2:D10, 2), D2:D10, 0))

まとめ

「下位n件を抽出 → SMALL」の型は、上位の LARGE と対になる形で覚えると簡単です。

数値だけ欲しいときの基本形:

=SMALL(範囲, n)
=SMALL($範囲$, ROW(A1))   ' コピーで n を自動増加

「下位n件の名前・商品など」を取りたいときの基本形:

=INDEX(取りたい列,
       MATCH(SMALL(評価列, n), 評価列, 0))

=INDEX($取りたい列$,
       MATCH(SMALL($評価列$, ROW(A1)), $評価列$, 0))

この型さえ身につければ、

  • 売上ワーストn件
  • 点数の低い人n名
  • 不良が多い(or少ない)データの抽出

といった“ワースト系・下位系ランキング”を、
どんな表でも素早く作れるようになります。

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