スプレッドシートのRANK関数の使い方|同順位・連番・RANK.EQ/AVG対応【完全ガイド】

スポンサーリンク

「売上データやテスト結果に順位を付けたいけど、毎回手作業で並べ替えるのは面倒」。そんな悩みはありませんか?

データが更新されるたびに順位を付け直していると、ミスも起きやすいですし、時間もかかりますよね。

RANK関数を使えば、順位を自動で計算できます。同順位の扱いや降順・昇順の切り替え、RANK.EQ/RANK.AVGとの違いまで、この記事ではスプレッドシート実務で本当に使える知識をまるごと解説します。

  1. RANK関数とは?値の順位を返す関数
    1. RANK関数でできること
  2. RANK関数の書き方(構文と引数)
    1. 基本構文
    2. 引数の説明
    3. 第3引数がRANK関数のポイント
  3. 基本的な使い方:売上ランキングを自動化する
    1. サンプルデータ
    2. 絶対参照が必須
    3. 結果の見方
    4. 降順と昇順の切り替え
  4. 同順位への対処法|COUNTIFで連番順位を作る
    1. RANKの同順位は「次の順位を飛ばす」方式
    2. 連番(4, 5, 6)にしたいならCOUNTIFを組み合わせる
    3. 昇順の連番にも応用できる
  5. RANK.EQ / RANK.AVGとの使い分け
    1. 3つの関数の違い早見表
    2. RANK.AVGの動作を具体例で確認
    3. 判断フロー
  6. 実務で使える応用パターン5選
    1. パターン1:テスト成績の順位表を作る
    2. パターン2:納期が早い順にランキングを付ける
    3. パターン3:別シートのデータを参照する(クロスシート順位)
    4. パターン4:条件付き順位(部署別ランキング)
    5. パターン5:ARRAYFORMULAで全行を一括順位付け(Googleスプレッドシート固有)
  7. よくあるエラーと対処法
    1. エラー1:#N/A エラー
    2. エラー2:文字列型の数字が原因で順位がずれる
    3. エラー3:#VALUE! エラー
    4. エラー4:空白セル混在で順位が期待と異なる
  8. LARGE・SMALL関数との違い|順位系9関数の比較表
    1. RANKとLARGE/SMALLは逆方向
    2. 順位・集計系の9関数を比較
  9. まとめ
    1. この記事のポイント
    2. 次のステップ:関連する関数で集計力を底上げ

RANK関数とは?値の順位を返す関数

RANK関数は、指定した値がデータの中で何番目かを返す関数です。読み方は「ランク」で、英語の「Rank(順位)」がそのまま名前になっています。

たとえば売上データで「85万円は何位?」と聞きたいときに使います。答えを数値(1位、2位、3位…)で返してくれる関数です。

RANK関数でできること

RANK関数の用途は、大きく分けて次の3つです。

  • 売上やテスト点数など、数値データに自動で順位を付ける
  • 降順(大きい順)と昇順(小さい順)を切り替えて、ランキング方向を自在に制御
  • 同順位が発生したときの挙動を理解した上で、COUNTIFやRANK.AVGと組み合わせて柔軟に対応

NOTE

スプレッドシートの RANKRANK.EQ と同じ動作をします。Excel互換のために両方が用意されている関係で、新規作成のシートでは RANK.EQ を明示的に使うと意図が伝わりやすいですが、RANK のままでも問題ありません。

RANK関数の書き方(構文と引数)

基本構文

=RANK(値, 範囲, [順序])

引数の説明

引数必須/任意説明
必須順位を調べたいセル(または数値)
範囲必須順位を比較するデータ範囲
順序任意0=降順(大きい順)、1=昇順(小さい順)。省略すると0(降順)

第3引数がRANK関数のポイント

RANK関数で最も間違えやすいのが、第3引数の「順序」です。

  • 省略 または 0: 降順(大きい値が1位)
  • 1: 昇順(小さい値が1位)

売上ランキングなら「大きいほど良い」ので降順(省略)、納期やコストなら「小さいほど良い」ので昇順(1)と、使い分けてください。

TIP

スプレッドシートでは TRUE(=1)FALSE(=0)も受け付けますが、慣習的には 01 を使います。コードレビューの観点でも数値のほうが誤読が少ないです。

基本的な使い方:売上ランキングを自動化する

実際に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 のように参照範囲がずれてしまい、全員が違う範囲で順位計算される異常状態になります。

$ を付けるだけで済む話なので、忘れないように習慣化しましょう。

結果の見方

数式を入れると、次のような結果になります。

担当者売上順位
田中854
鈴木922
佐藤786
山田951
高橋883
伊藤727
渡辺854

田中と渡辺はどちらも85で同じ4位、そして次は5位を飛ばして6位になっています。これがRANK関数の基本挙動です。同順位への対処法は次のセクションで詳しく見ていきます。

降順と昇順の切り替え

第3引数を変えると、順位の方向を反転できます。

=RANK(B2,$B$2:$B$8, 0)   → 降順(大きい値が1位)
=RANK(B2,$B$2:$B$8, 1)   → 昇順(小さい値が1位)

同じ売上データで降順と昇順を比較すると、こうなります。

担当者売上降順(0)昇順(1)
田中8543
鈴木9226
山田9517
伊藤7271

売上ランキングなら降順(0)、原価順位やエネルギー消費量ランキングなど「小さいほど良い」指標なら昇順(1)が自然です。

同順位への対処法|COUNTIFで連番順位を作る

RANK関数の挙動で一番つまずきやすいのが、同順位の扱いです。

RANKの同順位は「次の順位を飛ばす」方式

先ほどの例で田中と渡辺が両方4位になり、次が6位になったのは、RANK関数が「Standard Competition Ranking(標準競技順位)」と呼ばれるオリンピック方式を採用しているためです。

売上RANKの順位
951
922
883
854 ← 同順位
854 ← 同順位
786 ← 5位はスキップ
727

スポーツの順位と同じで、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行目 田中8541(初回)4+1-1=4
8行目 渡辺8542(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.EQRANK.AVG という2つの兄弟関数があります。これを理解しないと、特にチームでの集計で「なぜか順位が小数になる」と混乱します。

3つの関数の違い早見表

関数同順位の扱い使う場面
RANK同じ順位を付与、次を飛ばす従来互換、Excel古い環境
RANK.EQ同じ順位を付与、次を飛ばす(RANKと同一)新規に書くなら推奨
RANK.AVG同順位に「該当順位の平均」を付与公平に平均で按分したい

RANKRANK.EQ完全に同じ動作です。.EQ は “Equal”(同順位は同じ順位)の意味で、Excel 2010 以降で明示的に追加された関数です。互換性のため RANK も残っています。

RANK.AVGの動作を具体例で確認

同じ85が2つあるデータで比較してみましょう。

売上RANK/RANK.EQRANK.AVG
9511
9222
8833
8544.5
8544.5
7866
7277

85の2人は本来「4位」と「5位」を分け合うべきですが、優劣がない場合にRANK.AVGは平均の (4+5)/2 = 4.5 を両方に付与します。

判断フロー

どれを使うか迷ったら、次のフローで決めましょう。

  1. 同順位は「同じ順位で次飛ばし」でOKRANK.EQ(新規)または RANK(互換優先)
  2. 同順位を連番にしたい(4, 5, 6)RANK + COUNTIF の組み合わせ
  3. 同順位を平均順位で公平に評価したい(4.5, 4.5)RANK.AVG

詳しくは スプレッドシートのRANK.EQ関数の使い方スプレッドシートのRANK.AVG関数の使い方 でそれぞれ深掘りしています。

実務で使える応用パターン5選

基本を押さえたところで、実務でよく出る5つのパターンを見ていきましょう。

パターン1:テスト成績の順位表を作る

テストの点数に降順で順位を付ける、王道パターンです。

生徒名点数順位
A78=RANK(B2,$B$2:$B$6) → 3
B92→ 1
C65→ 5
D85→ 2
E72→ 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.EQRANKと同一(明示版)
RANK.AVG同順位は平均順位
LARGEN番目に大きい値
SMALLN番目に小さい値
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関数の使い方がわかったら、順位・集計系の関連関数もあわせて覚えておくと分析の幅が広がります。

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