「売上データの順位を付けたいけど、同じ数値が並んだときどうなるの?」。スプレッドシートで順位付けをしていると、こんな場面に出くわしますよね。
同順位のときに最上位の順位をそのまま返すのが、RANK.EQ関数です。たとえば2位が3人いれば、全員に「2位」と表示してくれます。
この記事では、スプレッドシートのRANK.EQ関数の基本から実務での活用パターンまで解説します。RANK関数やRANK.AVG関数との違いも比較表で整理しました。
スプレッドシートのRANK.EQ関数とは?
RANK.EQ関数は、指定した値がデータの中で何番目かを返す関数です。読み方は「ランク イコール」で、EQはEqual(等しい)の略になります。
同じ値が複数ある場合は、最上位の順位をそのまま返します。たとえば2位・3位・4位の3人が同じ点数なら、3人とも「2位」です。
RANK関数と動作は同じですが、RANK.EQはRANKの正式な後継関数です。新しく数式を書くならRANK.EQがおすすめですよ。
NOTE
スプレッドシートでは
RANKとRANK.EQは完全に同じ動作をします。Excelとの互換性も問題ありません。
RANK.EQ関数の書き方(構文と引数)
基本構文
=RANK.EQ(値, 範囲, [順序])
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 値 | 必須 | 順位を調べたいセル |
| 範囲 | 必須 | 順位を比較するデータ範囲 |
| 順序 | 任意 | 0=降順(大きい順)、1=昇順(小さい順)。省略すると0(降順) |
構文はRANK関数やRANK.AVG関数とまったく同じです。関数名を置き換えるだけで切り替えられますよ。
RANK.EQ関数の基本的な使い方
以下の売上データでRANK.EQ関数を使ってみましょう。
| A列(担当者) | B列(売上) | C列(順位) | |
|---|---|---|---|
| 2行目 | 田中 | 85 | =RANK.EQ(B2,$B$2:$B$8) |
| 3行目 | 鈴木 | 92 | |
| 4行目 | 佐藤 | 78 | |
| 5行目 | 山田 | 95 | |
| 6行目 | 高橋 | 88 | |
| 7行目 | 伊藤 | 72 | |
| 8行目 | 渡辺 | 85 |
C2セルに =RANK.EQ(B2,$B$2:$B$8) と入力します。
範囲を絶対参照($B$2:$B$8)にするのがポイントです。数式を下にコピーしても範囲がずれません。
結果は以下のようになります。
| 担当者 | 売上 | 順位 |
|---|---|---|
| 田中 | 85 | 4 |
| 鈴木 | 92 | 2 |
| 佐藤 | 78 | 6 |
| 山田 | 95 | 1 |
| 高橋 | 88 | 3 |
| 伊藤 | 72 | 7 |
| 渡辺 | 85 | 4 |
田中と渡辺はどちらも売上85で同じです。RANK.EQ関数は両方に4位(最上位の順位)を返します。5位はスキップされ、次は6位になりますよ。
降順と昇順の切り替え
第3引数で順位の方向を変えられます。
=RANK.EQ(B2,$B$2:$B$8, 0) → 降順(大きい値が1位)
=RANK.EQ(B2,$B$2:$B$8, 1) → 昇順(小さい値が1位)
| 担当者 | 売上 | 降順(0) | 昇順(1) |
|---|---|---|---|
| 田中 | 85 | 4 | 3 |
| 鈴木 | 92 | 2 | 6 |
| 山田 | 95 | 1 | 7 |
| 伊藤 | 72 | 7 | 1 |
売上ランキングなら降順(0)、コスト順位なら昇順(1)が自然です。用途に応じて使い分けてみてください。
RANK・RANK.EQ・RANK.AVGの違い
RANK系の3つの関数は構文が同じで、同順位の処理方法だけが異なります。比較表で整理しましょう。
3関数の基本比較
| 項目 | RANK | RANK.EQ | RANK.AVG |
|---|---|---|---|
| 読み方 | ランク | ランク イコール | ランク アベレージ |
| 構文 | =RANK(値, 範囲, [順序]) | =RANK.EQ(値, 範囲, [順序]) | =RANK.AVG(値, 範囲, [順序]) |
| 同順位の処理 | 最上位を返す | 最上位を返す | 平均を返す |
| 位置づけ | 互換性関数 | RANKの後継 | RANKの後継 |
RANK関数とRANK.EQは動作が同じです。RANKは互換性のために残されている関数なので、新しく書くならRANK.EQまたはRANK.AVG関数がおすすめです。
同順位の処理方法の違い(具体例)
データ「100, 80, 80, 80, 50」の順位を3関数で比較します。
| データ | RANK / RANK.EQ | RANK.AVG |
|---|---|---|
| 100 | 1 | 1 |
| 80 | 2 | 3 |
| 80 | 2 | 3 |
| 80 | 2 | 3 |
| 50 | 5 | 5 |
RANK / RANK.EQは「80」に最上位の2位を返します。3位・4位がスキップされて次は5位です。
RANK.AVG関数は「80」に (2+3+4)/3 = 3位を返します。順位の合計が保たれるので、統計的に公平な順位付けですよ。
どの関数を使うべきか?
| 用途 | おすすめの関数 |
|---|---|
| 売上ランキング・成績表 | RANK.EQ(同順位は上位で統一) |
| 統計分析・アンケート集計 | RANK.AVG関数 |
| 既存シートの互換性維持 | RANK関数(そのまま使ってOK) |
TIP
迷ったらRANK.EQ関数を選んでおけば間違いありません。RANKの正式後継で、もっとも一般的な順位付け方法です。
実務で使えるRANK.EQ関数の活用パターン
パターン1: 同順位でも連番で順位を付ける
RANK.EQ関数は同じ値に同じ順位を返すため、次の順位が飛びます。「4, 4, 6」ではなく「4, 5, 6」の連番にしたいときは、COUNTIF関数と組み合わせましょう。
=RANK.EQ(B2,$B$2:$B$8)+COUNTIF($B$2:B2,B2)-1
この数式のしくみは以下のとおりです。
RANK.EQ(B2,$B$2:$B$8): 通常の順位を求めるCOUNTIF($B$2:B2,B2): 現在行までに同じ値が何個あるかを数える-1: 初回(1個目)は調整しない
2つ目の同じ値には+1されるため、連番になりますよ。
パターン2: 上位N位だけに印を付ける
IF関数と組み合わせると、上位3位までに「対象」と表示できます。
=IF(RANK.EQ(B2,$B$2:$B$8)<=3, "対象", "")
表彰対象やボーナス対象の抽出に使えるパターンです。人数が変わっても数式はそのままで使えるのが便利ですよ。
パターン3: LARGE/SMALL関数と組み合わせてトップ3を抽出する
RANK.EQ関数で順位を付けたあと、LARGE関数を使えば上位の値を取り出せます。
=LARGE($B$2:$B$8, 1) → 1位の売上(95)
=LARGE($B$2:$B$8, 2) → 2位の売上(92)
=LARGE($B$2:$B$8, 3) → 3位の売上(88)
逆に、下位の値を取り出すならSMALL関数を使います。
=SMALL($B$2:$B$8, 1) → 最下位の売上(72)
RANK.EQで「何位か」を確認し、LARGE/SMALLで「その値はいくつか」を取得する。この組み合わせは実務でよく使いますよ。
パターン4: 順位からパーセンタイルで分布を把握する
順位だけでなく、データ全体の中での位置を割合で見たい場合はPERCENTILE関数が役立ちます。
たとえば「上位25%はどのラインか」を知りたいなら、以下の数式です。
=PERCENTILE($B$2:$B$8, 0.75) → 上位25%の境界値
RANK.EQで個別の順位を付け、PERCENTILE関数で全体の分布を把握する。セットで使うとデータの見え方がぐっと広がりますよ。
RANK.EQ関数の実務活用例
基本の使い方をおさえたら、もう少し踏み込んだ実務シーンも見ておきましょう。ここでは「複数範囲をまとめて順位付けする」「グループ内で順位を付ける」という2つの例を紹介します。
例1: 複数範囲にまたがる順位付け
データが1つの列にきれいに並んでいるとは限りません。たとえば前期の売上がB列、後期の売上がC列に分かれていて、両方をまとめて1つのランキングにしたいケースがあります。
このようなときは、波括弧 {} を使って複数の範囲を1つの配列として連結します。基本のイメージは以下のとおりです。
=RANK.EQ(A2, {A2:A10, C2:C10})
ただし、ここで注意したいのがGoogleスプレッドシートの仕様です。スプレッドシートでは、カンマ , は配列の横方向(列)の結合、セミコロン ; は縦方向(行)の結合を意味します。
順位付けで使う範囲は縦に長い1列のデータが多いため、縦に積み上げる形で結合します。つまり、スプレッドシートでは次のようにセミコロンで書く必要があります。
=RANK.EQ(B2, {$B$2:$B$10; $C$2:$C$10})
この数式は、B列とC列のデータを縦につなげた1つの大きな範囲の中で、B2の値が何位かを返します。ExcelのRANK.EQでも複数範囲を扱えますが、配列の区切り記号がスプレッドシートと異なる点に気をつけてください。
TIP
区切り記号を間違えると、結果が合わなかったりエラーになったりします。「縦に積むならセミコロン」と覚えておくと迷いません。
例2: IF関数で条件付き順位付け(部署内順位)
「全体の順位ではなく、部署ごとの順位を出したい」という要望はとても多いです。たとえば同じ表の中に複数の部署が混在していて、各社員が自分の部署内で何位かを知りたいケースです。
このときはIF関数を組み合わせた配列数式を使います。A列に部署名、B列に売上が入っているとして、次のように書きます。
=RANK.EQ(B2, IF($A$2:$A$10=A2, $B$2:$B$10))
この数式のしくみは以下のとおりです。
IF($A$2:$A$10=A2, $B$2:$B$10): A2と同じ部署の行だけ売上を残し、それ以外は無視するRANK.EQ(B2, ...): 抽出された同じ部署のデータの中で、B2が何位かを返す
結果として、各社員に「自分の部署内での順位」が表示されます。営業1課・営業2課のように部署が分かれた成績表で重宝するパターンです。
なお、IF関数を範囲全体に適用する配列数式は、現在のGoogleスプレッドシートでは通常のEnterで動作します。一方、古いExcelのバージョンでは、入力後に Ctrl + Shift + Enter を押して配列数式として確定する必要があります。確定すると数式が {} で囲まれて表示されますよ。
NOTE
同じ数式でも環境によって確定方法が変わることがあります。「結果が空欄やエラーになる」ときは、配列数式として正しく確定できているか確認してみてください。
よくあるエラーと対処法
#N/Aエラー
「値」が「範囲」に含まれていない場合に発生します。
よくある原因と対策:
| 原因 | 対策 |
|---|---|
| 値のセルが範囲外 | 範囲を正しく指定し直す |
| 値が文字列型の数字 | VALUE関数で数値に変換する |
| 範囲にテキストが混在 | 数値だけの範囲を指定する |
特に注意したいのが「文字列型の数字」です。見た目は数字でも、文字列として入力されていることがあります。=VALUE(A1) で数値に変換してから渡しましょう。
TIP
セルを選択して左揃えになっている数字は文字列型の可能性があります。数値は右揃えが初期設定ですよ。
RANK.EQ関数のよくある質問(FAQ)
Q: RANK関数とRANK.EQ関数は何が違いますか?
完全に同じ動作をします。RANK.EQはRANKの正式な後継関数です。互換性のため両方使えますが、新しく書く場合はRANK.EQを使うのが推奨です。
Q: 同順位の人を全員「1位」にしたいのですが、できますか?
RANK.EQを使えば同順位は全員同じ順位番号になります。たとえば3人が同点で1位なら、全員に「1」が返ります。4位は「4」(2位・3位は空き)になります。連番で振りたい場合はCOUNTIFとの組み合わせで対応できます。
Q: RANK.EQ関数はExcelでも使えますか?
はい、ExcelのRANK.EQ関数もGoogleスプレッドシートと同じ書き方で動作します。ただし、Excelのバージョンによってはちょっとした差異がある場合もあるので、「結果が同じか確認する」習慣をつけておくと安心です。
まとめ
RANK.EQ関数は、データの中で何番目かを返す関数です。同順位がある場合は最上位の順位を返します。
この記事のポイント
- 構文は
=RANK.EQ(値, 範囲, [順序])の3引数 - 同順位がある場合、最上位の順位を返す(例: 2位が3人なら全員2位)
- RANK関数と動作は同じだが、RANK.EQが正式な後継関数
- 第3引数: 0(省略可)=降順、1=昇順
- 範囲は絶対参照($)で固定するのを忘れずに
- 連番にしたいときはCOUNTIF関数と組み合わせる
関連する順位・分析関数
RANK.EQ関数の使い方がわかったら、以下の関数もあわせて覚えてみてください。順位付けのバリエーションが広がりますよ。
- スプレッドシートRANK.AVG関数の使い方 — 同順位を平均で返したいとき
- スプレッドシートのRANK関数の使い方 — RANK.EQと同じ動作の互換性関数
- スプレッドシートのLARGE関数の使い方 — N番目に大きい値を取り出す
- スプレッドシートのSMALL関数の使い方 — N番目に小さい値を取り出す
- スプレッドシートのPERCENTILE関数の使い方 — データの分布をパーセンタイルで把握
