「売上データにランキングを付けたいけど、手作業で並べ替えるのは面倒…」。こんな場面、仕事で意外と多いですよね。
データが増えるたびに目視で順位を振り直すのは大変ですし、ミスも起きやすいです。
ExcelのRANK関数を使えば、数式ひとつで順位を自動計算できます。 この記事では基本の書き方から降順・昇順の切り替え、同順位の処理、重複なしの連番順位の作り方まで解説します。
RANK関数とは?
RANK関数は、指定した数値がデータの中で何番目に大きいか(または小さいか)を返す関数です。
読み方は「ランク関数」です。英語の「rank(順位・等級)」がそのまま関数名になっています。すべてのExcelバージョンで使えます。
たとえば売上データの中で「A店は何位?」を調べるときに使います。数式を入れるだけで順位が自動計算されるので、手動で並べ替える必要がありません。
NOTE
RANK関数はExcel 2010以降では互換性関数という扱いです。新しいRANK.EQ関数が後継として用意されています。現在のExcelでも問題なく使えますが、新規で数式を作るならRANK.EQ関数がおすすめです。
ExcelのRANK関数の書き方(構文と引数)
基本構文
=RANK(数値, 参照, [順序])
引数の説明
| 引数 | 必須/省略可 | 説明 |
|---|---|---|
| 数値 | 必須 | 順位を調べたい数値またはセル参照 |
| 参照 | 必須 | 順位の基準となるデータ範囲 |
| 順序 | 省略可 | 0または省略 = 降順(大きい順)、0以外 = 昇順(小さい順) |
数値には、順位を知りたいセルを指定します。たとえば売上一覧の中でB2セルの値が何位かを調べるなら、B2を入れます。
参照には、比較対象となるデータ範囲を指定します。テキストや空白セルは自動的に無視されます。
順序を省略すると降順(大きい方が1位)です。昇順(小さい方が1位)にしたい場合は1を指定してください。
TIP
第3引数は省略すると0扱い(降順)になります。売上やテスト点数など「大きいほど良い」データなら、省略してOKです。
ExcelのRANK関数の基本的な使い方
降順で順位を求める(大きい方が1位)
売上金額が高い順にランキングを付ける場合です。
たとえばA列に担当者名、B列に売上金額が入っているとします。C2セルに次の数式を入力します。
=RANK(B2,$B$2:$B$8)
B2の値が、B2からB8の範囲で何番目に大きいかを返します。第3引数を省略しているので、降順で計算されます。
C3以降にもオートフィルでコピーすれば、全員分の順位が一括で表示されます。
昇順で順位を求める(小さい方が1位)
タイムや不良品数のように、小さい方がよい数値の場合です。
=RANK(B2,$B$2:$B$8,1)
第3引数に1を指定すると、昇順になります。値が小さいほど上位(1位に近い)です。
降順・昇順の使い分け早見表
どちらを使うか迷ったときは、次の表を参考にしてみてください。
| 用途 | 第3引数 | 1位になる値 |
|---|---|---|
| 売上ランキング | 0(省略) | 最も高い売上 |
| テスト成績 | 0(省略) | 最も高い得点 |
| コスト比較 | 1 | 最も低いコスト |
| タイム計測 | 1 | 最も短い時間 |
| 不良品数 | 1 | 最も少ない不良品 |
「大きい方がいい数値なら降順(省略)、小さい方がいい数値なら昇順(1)」と覚えておくと判断しやすいですよ。
同じ値があるときの順位(同順位の処理)
RANK関数では、同じ値が複数あると同じ順位を返します。次の順位はその分だけスキップされます。
たとえばデータが {100, 80, 80, 60} の場合、降順の順位は次のとおりです。
| データ | 順位 |
|---|---|
| 100 | 1位 |
| 80 | 2位 |
| 80 | 2位 |
| 60 | 4位(3位はスキップ) |
80が2つあるので、両方に2位がつきます。3位は飛ばされて、60は4位です。
この動作が困る場合は、後述の「重複なしの連番順位を作る」パターンで対処できます。
参照に絶対参照を使う理由
RANK関数をオートフィルでコピーするとき、第2引数の参照範囲は必ず絶対参照にしてください。
=RANK(B2,$B$2:$B$8) ← 絶対参照(正しい)
=RANK(B2,B2:B8) ← 相対参照(NG)
相対参照のままコピーすると、行ごとに参照範囲がずれます。その結果、比較対象が変わって正しい順位が出なくなります。
$B$2:$B$8 のように $ を付けて範囲を固定しましょう。
RANK関数の実務活用パターン
パターン1: 売上ランキングの作成
営業担当ごとの月次売上を自動でランキング表示する例です。
A列に氏名、B列に売上金額があるとします。C列に次の数式を入れます。
=RANK(B2,$B$2:$B$20)
オートフィルでC列全体にコピーすれば、全員の順位が表示されます。売上データが更新されると順位も自動で再計算されるので、毎月の集計が楽になりますよ。
パターン2: IF関数と組み合わせて上位判定
試験の点数で順位を出し、上位3名をIF関数で判定する例です。
=IF(RANK(B2,$B$2:$B$30)<=3,"合格","")
RANK関数の結果が3以下なら「合格」と表示します。RANK関数の戻り値は数値なので、IF関数などと組み合わせやすいのがポイントです。
パターン3: 条件付き書式で上位を色分け
RANK関数を条件付き書式に使って、上位5名のセルを自動で色付けする方法です。
- 対象範囲を選択します
- 「ホーム」タブの「条件付き書式」から「新しいルール」を選びます
- 「数式を使用して書式設定するセルを決定」を選びます
- 数式に次のように入力します
=RANK(B2,$B$2:$B$20)<=5
これで上位5名のセルが自動的にハイライトされます。データが更新されるとランキングも自動で変わるので便利ですよ。
パターン4: 重複なしの連番順位を作る(COUNTIF連携)
同じ値が複数あっても一意の連番順位を振りたい場合です。COUNTIF関数を組み合わせます。
=RANK(B2,$B$2:$B$10)+COUNTIF($B$2:B2,B2)-1
RANK関数の順位に、同じ値がそれまでに何件あるかを足して重複を解消します。
たとえば80が3つあった場合、RANK関数だけだと全部2位です。COUNTIF連携を使うと「2位、3位、4位」のように連番になります。
ポイントはCOUNTIF関数の範囲の開始位置を絶対参照、終了位置を相対参照にしていることです。$B$2:B2 とすることで、行が下がるにつれてカウント範囲が広がります。
よくあるエラーと対処法
RANK関数でよく発生するエラーとその原因・対処法を表にまとめました。
| エラー | 原因 | 対処法 |
|---|---|---|
#N/A | 数値が参照範囲に含まれていない | 数値と参照範囲のセルが一致しているか確認する |
#N/A | テキストとして保存された数値 | セルの書式が「文字列」になっていないか確認する。VALUE関数で数値に変換 |
#VALUE! | 数値に数値以外の値を指定した | セル参照を確認し、数値が入ったセルを指定する |
| 順位がずれる | 参照範囲を絶対参照にしていない | $B$2:$B$10 のように$を付けて範囲を固定する |
| 0が順位に含まれる | 空白セルに0が入力されている | 対象範囲から0のセルを除外するか、データを修正する |
NOTE
参照範囲にテキストや空白が含まれていても、RANK関数は自動的に無視します。エラーにはなりませんが、順位の母数には含まれない点に注意してください。
エラー値の詳細はExcelのエラー値一覧も参考にしてみてください。
RANK関数とLARGE・SMALL関数の違い
RANK関数とよく比較される関数に、LARGE関数とSMALL関数があります。操作の方向が逆なので、目的に応じて使い分けてください。
| 操作 | 関数 | 入力 → 出力 | 使用例 |
|---|---|---|---|
| 値 → 順位 | RANK | 85を渡す → 4位 | 「この人は何位?」 |
| 順位 → 値 | LARGE | 4位を渡す → 85 | 「4位の値はいくつ?」 |
| 順位 → 値(昇順) | SMALL | 2位を渡す → 72 | 「下から2番目はいくつ?」 |
たとえばデータが {95, 92, 88, 85, 78, 72} の場合を見てみましょう。
=RANK(85,$B$2:$B$7) → 4(85は4番目に大きい)
=LARGE($B$2:$B$7,4) → 85(4番目に大きい値は85)
RANKは「この値は何位?」と聞く関数です。LARGEは「何位の値は?」と聞く関数です。逆方向の操作ですが、結果は対になっていますよ。
「順位の数字がほしい」ならRANK、「順位に対応する値がほしい」ならLARGEまたはSMALLを使うと覚えておきましょう。
RANK・RANK.EQ・RANK.AVGの違いと使い分け
RANK関数には、新しいバージョンとしてRANK.EQ関数とRANK.AVG関数が用意されています。
3つの関数の比較表
| 項目 | RANK | RANK.EQ | RANK.AVG |
|---|---|---|---|
| 構文 | =RANK(数値, 参照, [順序]) | =RANK.EQ(数値, 参照, [順序]) | =RANK.AVG(数値, 参照, [順序]) |
| 同順位の扱い | 最上位の順位 | 最上位の順位 | 平均順位 |
| 互換性 | 互換性関数(旧バージョン向け) | Excel 2010以降の標準関数 | Excel 2010以降の標準関数 |
| 推奨度 | 既存数式の保守向き | 新規作成ならこちら | 統計分析が必要な場合 |
同順位の扱いの違い
3つの関数の一番大きな違いは、同じ値が複数あるときの順位の返し方です。
2番目に大きい値が3つある場合、それぞれ次のように順位を返します。
| データ | RANK / RANK.EQ | RANK.AVG |
|---|---|---|
| 100 | 1位 | 1位 |
| 80 | 2位 | 3位 |
| 80 | 2位 | 3位 |
| 80 | 2位 | 3位 |
| 50 | 5位 | 5位 |
RANK.AVG関数は (2+3+4) / 3 = 3 と平均を計算して返します。統計分析やアンケート集計では、RANK.AVG関数の方が正確な順位を得られます。
どの関数を使うべき?
迷ったときは次の基準で選んでみてください。
- 一般的な業務(売上ランキング、成績順位など): RANK.EQ関数
- 統計分析・アンケート集計: RANK.AVG関数
- 既存ファイルの保守: RANK関数(そのまま使い続けてOK)
RANKとRANK.EQは結果が同じなので、どちらを使っても計算は変わりません。新規作成ならRANK.EQ、既存ファイルならRANKのままで問題ありませんよ。
まとめ
RANK関数は、データの中から指定した値の順位を返す関数です。この記事のポイントを整理しておきます。
=RANK(数値, 参照, [順序])で順位を求められる- 第3引数を省略すると降順(大きい方が1位)
- 参照範囲は絶対参照(
$)で固定するのがポイント - 同じ値には同じ順位がつく。連番にしたいならCOUNTIF関数と組み合わせる
- 新規作成なら後継のRANK.EQ関数がおすすめ
- 統計的に正確な順位が必要ならRANK.AVG関数を使う
売上ランキングや成績順位の自動化にぜひ活用してみてください。
順位に関連する関数
順位や最大・最小を扱う関数はほかにもあります。用途に応じて使い分けてみてください。
| 関数 | 機能 |
|---|---|
| LARGE関数 | N番目に大きい値を取得する |
| SMALL関数 | N番目に小さい値を取得する |
| MAX関数 | 最大値を取得する |
| MIN関数 | 最小値を取得する |
| MEDIAN関数 | 中央値を取得する |
| SORT関数 | データを自動で並べ替える |
