ExcelのSMALL関数|N番目に小さい値を取り出す使い方

スポンサーリンク

「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に次の売上データが入っているとします。

セル
B2150
B3280
B495
B5320
B6180
B795
B8410

昇順に並べると 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))

この数式の流れを分解してみましょう。

  1. SMALL($B$2:$B$10, 1) で最も小さい売上金額を取得
  2. MATCH(…, $B$2:$B$10, 0) でその金額の行位置を検索
  3. 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関数を使いこなせば、データの並べ替えなしでランキングが作れます。ぜひ日々の業務で試してみてください。

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