「下位の値を取り出したいのに、MIN関数だと最小値しかわからない」。そんな経験はありませんか?
2番目、3番目に小さい値を手作業で探すのは面倒ですよね。データが増えるほどミスのリスクも上がります。
SMALL関数を使えば、k番目に小さい値を一発で取り出せます。この記事では基本の書き方から実務パターン、エラー対処法まで丁寧に解説します。
SMALL関数とは?k番目に小さい値を返す関数
SMALL関数は、データの中からk番目に小さい値を返す関数です。読み方は「スモール」で、英語の「Small(小さい)」がそのまま名前になっています。
たとえばk=1なら最小値、k=2なら2番目に小さい値を返します。「下位N番目の値を取り出す」ときに使う関数です。
MIN関数は常に1番目(最小値)しか返せません。「2番目以降も取り出したい」ときにSMALL関数の出番です。
基本構文
=SMALL(データ, k)
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| データ | 必須 | 値を取り出す対象のセル範囲や配列 |
| k | 必須 | 何番目に小さい値を取り出すか(1=最小値) |
引数はたった2つです。LARGE関数と同じ構造なので、セットで覚えられますよ。
基本的な使い方
実際にSMALL関数を使ってみましょう。
B2:B8に「85, 92, 78, 95, 88, 70, 100」の7個の数値が入っているとします。
=SMALL(B2:B8, 1) → 70(1番目に小さい値)
=SMALL(B2:B8, 2) → 78(2番目に小さい値)
=SMALL(B2:B8, 3) → 85(3番目に小さい値)
kの値を変えるだけで、好きな順位の値を取り出せます。k=1のときはMIN関数と同じ結果です。
NOTE
SMALL関数は数値だけを対象にします。文字列・空白セル・論理値は無視されます。
SMALL関数の実務活用パターン4選
基本を押さえたところで、実務での使いどころを紹介します。
下位3件の売上を取り出す(ワースト分析)
月次売上の一覧から、下位3件の金額を取り出すケースです。
=SMALL(C2:C13, 1) → ワースト1位の売上額
=SMALL(C2:C13, 2) → ワースト2位の売上額
=SMALL(C2:C13, 3) → ワースト3位の売上額
C列に12か月分の売上金額が入っていれば、ワースト3が一発で表示されます。「どの月の売上がふるわなかったか」を分析したいときに便利です。
2番目に低いコストを確認する
仕入れ原価で「最安値は特価で参考にならない」という場面があります。そんなときはk=2を指定して、2番目に低い価格を取り出しましょう。
=SMALL(D2:D50, 2)
最安値を除いた実質的な底値が確認できます。相場感をつかみたいときにも使えるテクニックです。
下位N件の合計を求める(SMALL + SUM)
「売上ワースト3の合計」を求めたい場合は、SUM関数と組み合わせます。
=SUM(SMALL(C2:C13, {1,2,3}))
{1,2,3} は配列定数です。SMALL関数が1位・2位・3位の値をそれぞれ返し、SUM関数で合計します。
下位5件にしたい場合は {1,2,3,4,5} に変えるだけです。手軽に下位N件の合計が出せますよ。
2番目に小さい値の担当者名を取得する
「2番目に低い売上の担当者は誰?」を調べるには、INDEX関数とMATCH関数を組み合わせます。
=INDEX(A2:A10, MATCH(SMALL(B2:B10, 2), B2:B10, 0))
処理の流れはこうです。
- SMALL(B2:B10, 2) → 2番目に小さい売上額を取得
- MATCH(…, B2:B10, 0) → その値のある行番号を検索
- INDEX(A2:A10, …) → 対応する担当者名を取得
ちょっと長い数式に見えますが、やっていることはシンプルです。SMALL関数で値を特定し、MATCHで位置を探し、INDEXで名前を取る3ステップです。
よくあるエラーと対処法
SMALL関数で発生するエラーを2つ紹介します。
#NUM! エラー(kがデータ数を超えている)
これが最も多いエラーです。データが7個しかないのにk=10を指定すると、#NUM!エラーになります。
=SMALL(B2:B8, 10) → #NUM!
B2:B8は7セルなので、kは1から7までしか指定できません。k=0やマイナスの値でもエラーになります。
対処法:
- kの値がデータ数を超えていないか確認する
- データ数が変動する場合は
COUNT(B2:B8)で件数を把握する - kの上限チェックには次の数式が使えます
=IF(E1<=COUNT(B2:B8), SMALL(B2:B8, E1), "データ不足")
#VALUE! エラー(kに数値以外を指定)
kに文字列やセル参照の文字列型を指定するとエラーです。
=SMALL(B2:B8, "二") → #VALUE!
kには必ず数値を指定してください。セル参照を使う場合は、参照先が数値型か確認しましょう。
MIN関数との使い分け
SMALL関数とMIN関数の関係はシンプルです。
| 場面 | 使う関数 | 書き方 |
|---|---|---|
| 1番目に小さい値(最小値) | MIN | =MIN(B2:B8) |
| 2番目以降に小さい値 | SMALL | =SMALL(B2:B8, 2) |
1番目だけ必要ならMIN関数で十分です。2番目以降が必要になったらSMALL関数に切り替えてください。
ちなみに =SMALL(B2:B8, 1) と =MIN(B2:B8) は同じ結果を返します。ただし可読性を考えると、最小値にはMIN関数を使うほうが意図が伝わりやすいです。
LARGEとの対比・RANK関数との違い
SMALL関数と混同しやすい関数が2つあります。
LARGE関数(k番目に大きい値)
LARGE関数はSMALL関数の逆で、k番目に大きい値を返します。構文は完全に同じ構造です。
=SMALL(B2:B8, 1) → 70(最小値)
=LARGE(B2:B8, 1) → 100(最大値)
| 関数 | 返す値 | k=1のとき |
|---|---|---|
| SMALL | k番目に小さい値 | MIN関数と同じ |
| LARGE | k番目に大きい値 | MAX関数と同じ |
「下位の値ならSMALL、上位の値ならLARGE」と覚えてください。
RANK関数(順位を求める関数)
RANK関数はSMALL関数と逆方向の操作をします。
- SMALL関数: 順位を指定 → 値を返す(「2番目に小さい値は?」)
- RANK関数: 値を指定 → 順位を返す(「70点は何番目?」)
=SMALL(B2:B8, 1) → 70(1番目に小さい値)
=RANK(70, B2:B8, 1) → 1(70は昇順で1番目)
NOTE
RANK関数の第3引数に1を指定すると昇順(小さい順)になります。省略すると降順(大きい順)です。
「値を取り出したい」ならSMALL関数を使います。「順位を知りたい」ならRANK関数を使います。目的に応じて使い分けてください。
まとめ
SMALL関数は「k番目に小さい値を取り出す」関数です。MIN関数では対応できない「2番目以降の値」を簡単に取得できます。
この記事のポイント
- 構文は
=SMALL(データ, k)のたった2引数 - k=1なら最小値(MINと同じ)、k=2以降で真価を発揮
- SUM関数と組み合わせれば下位N件の合計も出せる
- #NUM!エラーはkがデータ数を超えているのが原因
- LARGEは逆方向(k番目に大きい値)、RANKは逆操作(値→順位)
次のステップ:関連する集計関数
SMALL関数の使い方がわかったら、以下の関数もあわせて覚えてみてください。データの分析力がぐっと上がりますよ。

