「N番目に小さい値を取り出したい」。Excelで売上データや在庫リストを扱っていると、こんな場面は意外と多いですよね。最小値だけならMIN関数で一発ですが、「下から3番目」となるとお手上げ……。
そこで活躍するのが SMALL関数 です。順位を指定するだけで、小さい方からN番目の値をサッと取得できます。この記事では、基本の書き方から実務で役立つ応用パターンまで、しっかり解説していきます。
ExcelのSMALL関数とは?読み方と基本の仕組み
SMALL関数は 「スモール関数」 と読みます。英語の「small(小さい)」がそのまま名前の由来です。
この関数は、指定した範囲の中から N番目に小さい値 を返します。たとえば「2番目に小さい値」や「5番目に小さい値」を、順位を指定するだけで取得できます。
動作のイメージはシンプルです。データを昇順(小さい順)に並べて、指定した順番の値を返す――ただそれだけです。実際にセルを並べ替える必要はありません。
テキストや空白セルは自動的に無視され、数値だけが対象になります。すべてのExcelバージョンと Microsoft 365 に対応しています。
SMALL関数の書き方(構文と引数)
基本構文
=SMALL(配列, 順位)
引数はたった2つ。どちらも必須です。
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 配列 | 必須 | 数値データが入ったセル範囲や配列 |
| 順位 | 必須 | 小さい方から何番目かを指定する数値 |
「配列」にはセル範囲(例: B2:B8)を指定します。「順位」には1以上の整数を入れてください。1を指定すれば最小値、2なら2番目に小さい値が返ります。
SMALL関数の基本的な使い方
ここからは実際の数式を見ていきましょう。サンプルデータとして、B2:B8に次の売上データが入っているとします。
| セル | 値 |
|---|---|
| B2 | 150 |
| B3 | 280 |
| B4 | 95 |
| B5 | 320 |
| B6 | 180 |
| B7 | 95 |
| B8 | 410 |
昇順に並べると 95, 95, 150, 180, 280, 320, 410 です。この順番を頭に入れておくと、結果が確認しやすくなります。
最も小さい値を取得する
=SMALL(B2:B8, 1)
結果は 95 です。順位に1を指定すると最小値が返ります。この結果は =MIN(B2:B8) と同じです。
3番目に小さい値を取得する
=SMALL(B2:B8, 3)
結果は 150 です。昇順で確認すると、95, 95, 150, 180……。たしかに3番目ですね。
小さい順にトップ5を一覧表示する
D2〜D6のセルに、順位1〜5をそれぞれ入力する方法です。
D2: =SMALL(B2:B8, 1) → 95
D3: =SMALL(B2:B8, 2) → 95
D4: =SMALL(B2:B8, 3) → 150
D5: =SMALL(B2:B8, 4) → 180
D6: =SMALL(B2:B8, 5) → 280
順位の部分をセル参照にすれば、数式のコピーだけで一覧が作れます。たとえばC列に1〜5の連番を入れておき、=SMALL(B2:B8, C2) としてオートフィルすると効率的です。
同じ値が複数あるときの動作
サンプルデータには95が2つあります。SMALL関数では、同じ値でもそれぞれ別の順位としてカウントされます。
- =SMALL(B2:B8, 1) → 95
- =SMALL(B2:B8, 2) → 95
- =SMALL(B2:B8, 3) → 150
RANK関数では同じ値に同順位が割り当てられますが、SMALLは重複値も1つずつ数えます。この違いは覚えておくと便利です。
SMALL関数の実務活用パターン
基本がわかったところで、実務でそのまま使えるパターンを5つ紹介します。
パターン1: 仕入れコストの下位3件を抽出
仕入れデータの中からコストが低い順に3件だけ取り出したい場面です。
A列に商品名、B列に仕入れコストが入っているとします。
=SMALL($B$2:$B$10, 1) → 下位1位のコスト
=SMALL($B$2:$B$10, 2) → 下位2位のコスト
=SMALL($B$2:$B$10, 3) → 下位3位のコスト
絶対参照($記号)を使えば、数式をコピーしても範囲がずれません。予算の見直しや価格比較に便利なパターンです。
パターン2: INDEX+MATCH+SMALLで下位者の名前を取得
SMALL関数で値を取り出せても、「その値に対応する名前も知りたい」ことがありますよね。そんなときはINDEX関数とMATCH関数を組み合わせます。
A列に担当者名、B列に売上金額が入っている場合の数式です。
=INDEX($A$2:$A$10, MATCH(SMALL($B$2:$B$10, 1), $B$2:$B$10, 0))
この数式の流れを分解してみましょう。
- SMALL($B$2:$B$10, 1) で最も小さい売上金額を取得
- MATCH(…, $B$2:$B$10, 0) でその金額の行位置を検索
- INDEX($A$2:$A$10, …) でその行の担当者名を返す
ちょっとむずかしく見えますが、やっていることはシンプルです。「値を見つけて、その行の名前を返す」という2ステップの処理です。
パターン3: IFERRORで「データなし」を表示
トップ5の一覧を作ったとき、データが5件に満たないとエラーになります。これを防ぐのがIFERROR関数です。
=IFERROR(SMALL(B2:B8, E2), "データなし")
SMALL関数の順位がデータ件数を超えると #NUM! エラーが出ます。IFERRORで囲めば、エラーの代わりに任意のメッセージを表示できます。データ件数が変動するリストでは、この書き方を習慣にしておくと安心です。
パターン4: 条件付きでN番目に小さい値を取得(IF+SMALL配列数式)
「営業部だけの中で最も小さい値」のように、条件付きで抽出したい場面もあります。A列に部署名、B列に金額が入っている場合の数式です。
=SMALL(IF($A$2:$A$10="営業部", $B$2:$B$10), 1)
Excel 2019以前のバージョンでは、Ctrl + Shift + Enter で確定する必要があります。Microsoft 365 や Excel 2021 ではそのままEnterで動作します。
IF関数が条件に合う値だけの配列を作り、SMALLがその中からN番目に小さい値を返す仕組みです。MINIFS関数は最小値しか取れませんが、この方法なら2番目・3番目も取得できます。
パターン5: ROW関数と組み合わせた動的な順位指定
「小さい順に並べたリストを、数式のコピーだけで作りたい」。そんなときに活躍するのがROW関数との組み合わせです。
D2セルに次の数式を入れ、下方向にオートフィルします。
=IFERROR(SMALL($B$2:$B$8, ROW()-1), "")
ROW関数はセルの行番号を返します。D2なら ROW()=2 なので ROW()-1=1、D3なら ROW()-1=2……と自動的に順位が増えていきます。IFERRORと組み合わせれば、データ件数を超えた行は空白になります。
よくあるエラーと対処法
SMALL関数で遭遇しやすいエラーは主に2種類です。
#NUM! エラー
このエラーが出る原因は2つあります。
- 順位がデータ件数を超えている — データが7件なのに =SMALL(B2:B8, 10) と指定した場合です。データの件数を COUNTA や COUNT で確認してみてください。
- 範囲に数値が1つもない — テキストだけのセル範囲を指定した場合に発生します。
#VALUE! エラー
- 順位に数値以外を指定した — 「三」のようなテキストや、数値に見えて実はテキストのセルが原因です。VALUE関数で数値に変換すると解消することがあります。
- 順位に0以下や小数を指定した — 順位は1以上の整数である必要があります。
エラーの種類と対処の全体像は、エラー値の種類と対処法一覧も参考にしてみてください。
MIN関数との違い――SMALLの方が便利な場面
「最小値を取るだけならMIN関数でいいのでは?」と思いますよね。たしかに、=SMALL(範囲, 1) と =MIN(範囲) の結果はまったく同じです。
ではSMALLを使うメリットはどこにあるのでしょうか。
- 2番目以降の値が取れる — MIN関数は最小値しか返せません。SMALL関数なら順位を変えるだけで何番目でも取得できます。
- 小さい順の一覧を作れる — ROW関数と組み合わせれば、昇順のランキングが数式だけで完成します。
- 条件付きのN番目に対応 — IF関数と組み合わせれば、条件を満たすデータの中からN番目が取れます。
逆に、単純に最小値だけほしい場合はMIN関数のほうがシンプルで読みやすいです。場面に応じて使い分けてみてください。
LARGE関数との違い・使い分け
SMALL関数と対になる関数がLARGE関数です。構文はまったく同じで、方向だけが逆になります。
比較表
| 項目 | SMALL関数 | LARGE関数 |
|---|---|---|
| 方向 | 小さい方からN番目 | 大きい方からN番目 |
| 構文 | =SMALL(配列, 順位) | =LARGE(配列, 順位) |
| 順位1のとき | 最小値(=MIN) | 最大値(=MAX) |
| 用途例 | コスト下位抽出 | 売上トップ抽出 |
どちらを使うべき?
使い分けはとてもシンプルです。
- 低い方から探したい → SMALL関数(最低コスト、最短時間など)
- 高い方から探したい → LARGE関数(最高売上、最長記録など)
どちらも引数の数やエラーの挙動は同じです。覚えるのは「方向が逆」という一点だけで大丈夫です。
順位系の関連関数
順位や最大・最小にかかわる関数は他にもあります。目的に応じて選んでみてください。
まとめ
SMALL関数は、データの中から N番目に小さい値 を取り出す関数です。
この記事のポイントをおさらいしましょう。
- 構文は =SMALL(配列, 順位) で、引数は2つだけ
- 順位を変えるだけで、2番目・3番目と自由に取得できる
- INDEX+MATCHと組み合わせれば、対応する名前も取得可能
- IFERRORで囲めば、エラー時も安全に処理できる
- IF関数との配列数式で、条件付きの抽出にも対応
- 最小値だけならMIN関数、大きい方からならLARGE関数と使い分ける
SMALL関数を使いこなせば、データの並べ替えなしでランキングが作れます。ぜひ日々の業務で試してみてください。
