RANK関数で同順位を考慮した順位付けをする方法

売上一覧から「金額が大きい順に何位か」を出したいとき、結論から言うとRANK.EQ関数を使えば、同じ金額の行には同じ順位を割り当てながら、数式1つで全行の順位を求められます。この記事では基本の書き方、同順位が出たときの挙動、昇順・降順の指定方法まで解説します。

目次

RANK.EQで順位を求める基本の書き方

基本の形は次の通りです。

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

「範囲」内で「数値」が何番目に大きい(または小さい)かを返す関数です。「順序」を省略するか0を指定すると降順(大きい順に1位)、0以外を指定すると昇順(小さい順に1位)になります。

なぜRANKではなくRANK.EQなのか

古いバージョンのExcelにはRANK関数がありますが、Excel 2010以降ではRANK.EQ(同順位はすべて同じ順位)とRANK.AVG(同順位は平均順位)の2つに分かれました。RANK関数は互換性のために残っているだけの旧式扱いのため、新しく数式を組む場合はRANK.EQを使うのが基本です(結果自体はRANKとRANK.EQで同じになります)。

具体例:売上金額の順位を求める

次のような売上データ(A1:C9)があるとします。A列が日付、B列が担当者、C列が金額です。

A(日付) B(担当者) C(金額)
2 2026/6/3 佐藤 12000
3 2026/6/10 鈴木 8500
4 2026/6/15 佐藤 15000
5 2026/6/20 田中 9800
6 2026/7/2 鈴木 11000
7 2026/7/8 佐藤 13500
8 2026/7/15 高橋 7200
9 2026/7/22 田中 13500

C列(金額)が大きい順に順位を付けたい場合、C列(金額)のこの表に対して、次のように書きます。

=RANK.EQ(C2,$C$2:$C$9,0)

C2の金額(12,000円)が、C2:C9の範囲の中で大きい順に何位かを返す、という意味の数式です。範囲を$C$2:$C$9と絶対参照にしているのは、この数式を9行目までコピーしても範囲がずれないようにするためです。

1位は4行目(佐藤・15,000円)です。7行目(佐藤・13,500円)と9行目(田中・13,500円)は同じ金額のため、どちらも2位として扱われます。その次に大きい2行目(12,000円)は、2位が2件使われた分だけ順位が飛んで4位になります(3位は欠番)。

小さい順(昇順)に順位を付けたい場合

第3引数に0以外の数値(例えば1)を指定すると、小さい順に1位からの順位になります。

=RANK.EQ(C2,$C$2:$C$9,1)

「経費が少ない順に上位から並べたい」といった、小さい方を上位として扱いたい場面で使えます。

よくあるエラー・注意点

  • 範囲を絶対参照にし忘れると順位がずれる: $を付けずに範囲を相対参照のまま下の行にコピーすると、行ごとに範囲がずれてしまい正しい順位になりません。範囲は必ず絶対参照($C$2:$C$9)にしましょう。
  • 同順位の分だけ順位が飛ぶ: 上記の例のように、同順位が2件あると次の順位は1つ飛びます。「連番の順位」が欲しい場合はRANK.EQではなく別の工夫(COUNTIFを組み合わせるなど)が必要です。
  • RANK関数は非推奨: 結果は同じですが、新しく作る数式ではRANK.EQを使うのが安全です。RANK関数はExcel 2007以前との互換性のために残されています。

まとめ

RANK.EQ関数は同順位を自然に扱いながら、範囲内の数値の順位を1つの数式で求められます。順位の元になる平均をまず条件付きで求めたい場合はAVERAGEIFSで複数条件の平均を計算する方法、期間で絞り込んだ集計をしたい場合はSUMIFで日付範囲を指定して集計する方法もあわせてご覧ください。条件付き集計の考え方はSUMIFSで複数条件のOR集計をする方法も参考になります。

目次