「売上データやテスト結果に順位を付けたいけど、毎回手作業で並べ替えるのは面倒」。そんな悩みはありませんか?
データが更新されるたびに順位を付け直していると、ミスも起きやすいですし、時間もかかりますよね。
RANK関数を使えば、順位を自動で計算できます。同順位の扱いや降順・昇順の切り替え、RANK.EQ/RANK.AVGとの違いまで、この記事ではスプレッドシート実務で本当に使える知識をまるごと解説します。
RANK関数とは?値の順位を返す関数
RANK関数は、指定した値がデータの中で何番目かを返す関数です。読み方は「ランク」で、英語の「Rank(順位)」がそのまま名前になっています。
たとえば売上データで「85万円は何位?」と聞きたいときに使います。答えを数値(1位、2位、3位…)で返してくれる関数です。
RANK関数でできること
RANK関数の用途は、大きく分けて次の3つです。
- 売上やテスト点数など、数値データに自動で順位を付ける
- 降順(大きい順)と昇順(小さい順)を切り替えて、ランキング方向を自在に制御
- 同順位が発生したときの挙動を理解した上で、COUNTIFやRANK.AVGと組み合わせて柔軟に対応
NOTE
スプレッドシートの
RANKはRANK.EQと同じ動作をします。Excel互換のために両方が用意されている関係で、新規作成のシートではRANK.EQを明示的に使うと意図が伝わりやすいですが、RANKのままでも問題ありません。
RANK関数の書き方(構文と引数)
基本構文
=RANK(値, 範囲, [順序])
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 値 | 必須 | 順位を調べたいセル(または数値) |
| 範囲 | 必須 | 順位を比較するデータ範囲 |
| 順序 | 任意 | 0=降順(大きい順)、1=昇順(小さい順)。省略すると0(降順) |
第3引数がRANK関数のポイント
RANK関数で最も間違えやすいのが、第3引数の「順序」です。
- 省略 または 0: 降順(大きい値が1位)
- 1: 昇順(小さい値が1位)
売上ランキングなら「大きいほど良い」ので降順(省略)、納期やコストなら「小さいほど良い」ので昇順(1)と、使い分けてください。
TIP
スプレッドシートでは
TRUE(=1)FALSE(=0)も受け付けますが、慣習的には0と1を使います。コードレビューの観点でも数値のほうが誤読が少ないです。
基本的な使い方:売上ランキングを自動化する
実際にRANK関数を使って、売上データに順位を付けてみましょう。
サンプルデータ
次のような売上データがあるとします。
| A列(担当者) | B列(売上) | C列(順位) | |
|---|---|---|---|
| 2行目 | 田中 | 85 | =RANK(B2,$B$2:$B$8) |
| 3行目 | 鈴木 | 92 | |
| 4行目 | 佐藤 | 78 | |
| 5行目 | 山田 | 95 | |
| 6行目 | 高橋 | 88 | |
| 7行目 | 伊藤 | 72 | |
| 8行目 | 渡辺 | 85 |
C2セルに =RANK(B2,$B$2:$B$8) と入力し、C3〜C8にコピーします。
絶対参照が必須
ここで重要なのが、範囲を絶対参照($B$2:$B$8)にすることです。
相対参照(B2:B8)のままコピーすると、3行目では B3:B9、4行目では B4:B10 のように参照範囲がずれてしまい、全員が違う範囲で順位計算される異常状態になります。
$ を付けるだけで済む話なので、忘れないように習慣化しましょう。
結果の見方
数式を入れると、次のような結果になります。
| 担当者 | 売上 | 順位 |
|---|---|---|
| 田中 | 85 | 4 |
| 鈴木 | 92 | 2 |
| 佐藤 | 78 | 6 |
| 山田 | 95 | 1 |
| 高橋 | 88 | 3 |
| 伊藤 | 72 | 7 |
| 渡辺 | 85 | 4 |
田中と渡辺はどちらも85で同じ4位、そして次は5位を飛ばして6位になっています。これがRANK関数の基本挙動です。同順位への対処法は次のセクションで詳しく見ていきます。
降順と昇順の切り替え
第3引数を変えると、順位の方向を反転できます。
=RANK(B2,$B$2:$B$8, 0) → 降順(大きい値が1位)
=RANK(B2,$B$2:$B$8, 1) → 昇順(小さい値が1位)
同じ売上データで降順と昇順を比較すると、こうなります。
| 担当者 | 売上 | 降順(0) | 昇順(1) |
|---|---|---|---|
| 田中 | 85 | 4 | 3 |
| 鈴木 | 92 | 2 | 6 |
| 山田 | 95 | 1 | 7 |
| 伊藤 | 72 | 7 | 1 |
売上ランキングなら降順(0)、原価順位やエネルギー消費量ランキングなど「小さいほど良い」指標なら昇順(1)が自然です。
同順位への対処法|COUNTIFで連番順位を作る
RANK関数の挙動で一番つまずきやすいのが、同順位の扱いです。
RANKの同順位は「次の順位を飛ばす」方式
先ほどの例で田中と渡辺が両方4位になり、次が6位になったのは、RANK関数が「Standard Competition Ranking(標準競技順位)」と呼ばれるオリンピック方式を採用しているためです。
| 売上 | RANKの順位 |
|---|---|
| 95 | 1 |
| 92 | 2 |
| 88 | 3 |
| 85 | 4 ← 同順位 |
| 85 | 4 ← 同順位 |
| 78 | 6 ← 5位はスキップ |
| 72 | 7 |
スポーツの順位と同じで、2人が同率4位なら次は6位になるのが自然ですよね。この挙動で問題ない場面も多いです。
連番(4, 5, 6)にしたいならCOUNTIFを組み合わせる
ただし「必ず連番で順位を付けたい」という要件もあります。その場合はCOUNTIF関数を組み合わせます。
=RANK(B2,$B$2:$B$8)+COUNTIF($B$2:B2,B2)-1
この数式のしくみは、次の3つの部品に分解するとわかりやすいです。
RANK(B2,$B$2:$B$8): 通常のRANK順位(85は両方とも4になる)COUNTIF($B$2:B2,B2): 現在行までに同じ値が何回出現したかをカウント-1: 初回(1回目)は加算しない調整
COUNTIFの範囲指定がポイントです。$B$2:B2 のように最初のセルだけ絶対参照、末尾は相対参照にします。こうすると、行が下がるにつれて検索範囲が1つずつ伸びていきます。
| 行 | 売上 | RANK結果 | COUNTIF結果 | 最終順位 |
|---|---|---|---|---|
| 2行目 田中 | 85 | 4 | 1(初回) | 4+1-1=4 |
| 8行目 渡辺 | 85 | 4 | 2(2回目) | 4+2-1=5 |
これで田中が4位、渡辺が5位の連番順位になります。
昇順の連番にも応用できる
昇順で連番にしたいときも、同じ構造で対応できます。
=RANK(B2,$B$2:$B$8,1)+COUNTIF($B$2:B2,B2)-1
第3引数に 1 を追加するだけです。
RANK.EQ / RANK.AVGとの使い分け
Googleスプレッドシートには RANK 以外に、RANK.EQ と RANK.AVG という2つの兄弟関数があります。これを理解しないと、特にチームでの集計で「なぜか順位が小数になる」と混乱します。
3つの関数の違い早見表
| 関数 | 同順位の扱い | 使う場面 |
|---|---|---|
RANK | 同じ順位を付与、次を飛ばす | 従来互換、Excel古い環境 |
RANK.EQ | 同じ順位を付与、次を飛ばす(RANKと同一) | 新規に書くなら推奨 |
RANK.AVG | 同順位に「該当順位の平均」を付与 | 公平に平均で按分したい |
RANK と RANK.EQ は完全に同じ動作です。.EQ は “Equal”(同順位は同じ順位)の意味で、Excel 2010 以降で明示的に追加された関数です。互換性のため RANK も残っています。
RANK.AVGの動作を具体例で確認
同じ85が2つあるデータで比較してみましょう。
| 売上 | RANK/RANK.EQ | RANK.AVG |
|---|---|---|
| 95 | 1 | 1 |
| 92 | 2 | 2 |
| 88 | 3 | 3 |
| 85 | 4 | 4.5 |
| 85 | 4 | 4.5 |
| 78 | 6 | 6 |
| 72 | 7 | 7 |
85の2人は本来「4位」と「5位」を分け合うべきですが、優劣がない場合にRANK.AVGは平均の (4+5)/2 = 4.5 を両方に付与します。
判断フロー
どれを使うか迷ったら、次のフローで決めましょう。
- 同順位は「同じ順位で次飛ばし」でOK →
RANK.EQ(新規)またはRANK(互換優先) - 同順位を連番にしたい(4, 5, 6) →
RANK + COUNTIFの組み合わせ - 同順位を平均順位で公平に評価したい(4.5, 4.5) →
RANK.AVG
詳しくは スプレッドシートのRANK.EQ関数の使い方 と スプレッドシートのRANK.AVG関数の使い方 でそれぞれ深掘りしています。
実務で使える応用パターン5選
基本を押さえたところで、実務でよく出る5つのパターンを見ていきましょう。
パターン1:テスト成績の順位表を作る
テストの点数に降順で順位を付ける、王道パターンです。
| 生徒名 | 点数 | 順位 |
|---|---|---|
| A | 78 | =RANK(B2,$B$2:$B$6) → 3 |
| B | 92 | → 1 |
| C | 65 | → 5 |
| D | 85 | → 2 |
| E | 72 | → 4 |
最高点が1位になる降順が自然なので、第3引数は省略(または0)で使います。
パターン2:納期が早い順にランキングを付ける
日付データに昇順で順位を付けて、優先度を可視化する例です。
| タスク | 納期 | 優先順位 |
|---|---|---|
| 企画書 | 3/25 | =RANK(B2,$B$2:$B$5,1) → 1 |
| 報告書 | 4/10 | → 3 |
| 見積書 | 3/28 | → 2 |
| 資料 | 4/15 | → 4 |
日付は内部的に数値(シリアル値)として扱われるため、昇順(1)にすれば早い日付ほど小さい順位になります。
パターン3:別シートのデータを参照する(クロスシート順位)
「集計用シート」から「データ入力シート」の売上を参照して順位を付けるパターンです。
=RANK(B2, 'データ入力'!$B$2:$B$100)
シート名に日本語やスペースが含まれる場合は、シングルクォート ' で囲みます。半角英数字だけなら省略可能です。
パターン4:条件付き順位(部署別ランキング)
通常のRANK関数は範囲全体で順位を付けますが、「同じ部署内での順位」のような条件付き順位は SUMPRODUCT で実現します。
| 部署 | 氏名 | 売上 | 部署内順位 |
|---|---|---|---|
| 営業1課 | 田中 | 85 | =SUMPRODUCT(($A$2:$A$8=A2)*($C$2:$C$8>C2))+1 → 2 |
| 営業1課 | 鈴木 | 92 | → 1 |
| 営業2課 | 佐藤 | 78 | → 1 |
| 営業2課 | 山田 | 70 | → 2 |
この式は「自分と同じ部署で、自分より大きい売上の人数+1」で順位を計算しています。条件付き集計の王道テクニックです。
パターン5:ARRAYFORMULAで全行を一括順位付け(Googleスプレッドシート固有)
Googleスプレッドシート特有の ARRAYFORMULA を使うと、1つの数式で全行に順位を展開できます。
=ARRAYFORMULA(IF(B2:B8="", "", RANK(B2:B8, $B$2:$B$8)))
C2セルにこの数式を入れるだけで、C3〜C8には自動的に順位が表示されます。データ行が増えたときに自動で順位を追従させたい場合に強力です。
Excelにはない Googleスプレッドシート固有の強みなので、Googleシート運用ならぜひ覚えておきましょう。
よくあるエラーと対処法
RANK関数で遭遇しやすい4種類のエラーと対処法を整理します。
エラー1:#N/A エラー
「値」が「範囲」に含まれていない、または範囲に対象データがないときに発生します。
よくある原因と対策:
| 原因 | 対策 |
|---|---|
| 値のセルが範囲外 | 範囲を正しく指定し直す |
| 値が文字列型の数字 | VALUE関数で数値に変換する |
| 範囲にテキストしかない | 数値を含む範囲を指定する |
エラー2:文字列型の数字が原因で順位がずれる
CSVインポートや他ツールからのコピペでよく起きる問題です。見た目は数字でも、セル内部では文字列として保存されているケースです。
=VALUE(A1)
で数値に変換してからRANK関数に渡すか、「形式を指定して貼り付け → 値のみ」で貼り直すと解決します。
TIP
セルを選択して左揃えで表示されている数字は文字列型の可能性が高いです。数値は右揃えが既定なので、表示位置で見分けられます。
エラー3:#VALUE! エラー
第1引数(値)や第2引数(範囲)に、数値として解釈できない値が含まれているときに発生します。
- 値のセルが空白 → IFERRORで空白処理する
- 範囲の先頭が文字列 → 数値だけの範囲を再指定
エラー4:空白セル混在で順位が期待と異なる
RANK関数は範囲内の空白セルは無視して数値のみで順位計算します。ただし、「値」自体が空白だとエラーになります。
空白行がある表で順位を付けるなら、次のようにIF関数でラップすると安全です。
=IF(B2="", "", RANK(B2, $B$2:$B$8))
LARGE・SMALL関数との違い|順位系9関数の比較表
RANK関数とよく比較されるのが LARGE関数 と SMALL関数 です。両者は操作の方向が逆なので、使い分けを理解しましょう。
RANKとLARGE/SMALLは逆方向
| 関数 | 操作の方向 | 使う場面 |
|---|---|---|
| RANK | 値 → 順位 | 「85万円は何位?」 |
| LARGE | 順位 → 値(大きい方) | 「2位の売上はいくら?」 |
| SMALL | 順位 → 値(小さい方) | 「下から2番目はいくら?」 |
=RANK(85, B2:B8) → 4(85は4番目に大きい)
=LARGE(B2:B8, 4) → 85(4番目に大きい値)
RANKとLARGEは数学的に逆関数の関係です。「順位を知りたい」ならRANK、「値を取り出したい」ならLARGE/SMALLを選んでください。
順位・集計系の9関数を比較
スプレッドシートには順位・集計に使える関数が多数あります。用途別に整理するとこうなります。
| 関数 | 用途 | 対応記事 |
|---|---|---|
| RANK | 値の順位(同順位は飛ばす) | 本記事 |
| RANK.EQ | RANKと同一(明示版) | → |
| RANK.AVG | 同順位は平均順位 | → |
| LARGE | N番目に大きい値 | → |
| SMALL | N番目に小さい値 | → |
| MAX | 最大値(1位の値) | → |
| MIN | 最小値(最下位の値) | → |
| MEDIAN | 中央値 | → |
| MAXIFS | 条件付き最大値 | → |
順位付けをしたあとに「1位の人の名前を取り出したい」ような場面では、RANKだけでなくLARGEやMAXと組み合わせることが多いです。関数クラスター全体でデータ分析力が上がります。
まとめ
RANK関数は「データの中で値が何番目か」を返す、スプレッドシート順位付けの基本関数です。売上ランキング、テスト成績、納期優先度など、実務で頻出する場面に幅広く対応できます。
この記事のポイント
- 構文は
=RANK(値, 範囲, [順序])の3引数 - 第3引数: 0(省略可)=降順、1=昇順
- 範囲は絶対参照(
$)で固定するのを忘れずに - 同順位は「同じ順位で次飛ばし」方式(RANK.EQと同一)
- 連番にしたいなら
RANK + COUNTIF($B$2:B2,B2)-1 - 平均順位で按分したいなら
RANK.AVG - 条件付き順位(部署別など)は
SUMPRODUCTで代替 - ARRAYFORMULAで全行一括順位付けはGoogleシート固有の強み
- LARGE/SMALLは「順位→値」、RANKは「値→順位」の逆方向
次のステップ:関連する関数で集計力を底上げ
RANK関数の使い方がわかったら、順位・集計系の関連関数もあわせて覚えておくと分析の幅が広がります。

