売上一覧から「金額が大きい順に何位か」を出したいとき、結論から言うと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集計をする方法も参考になります。





