エクセル関数辞典 エクセル関数辞典

RANK関数の使い方|順位付けの基本と応用

RANK 順位 ランキング RANK.EQ RANK.AVG Excel関数
広告スペース (article-top)

RANK関数は、指定した範囲内でのデータの順位を求める関数です。売上成績の順位付けや試験結果のランキング作成など、業務のさまざまな場面で使われます。Excel 2010以降ではRANK.EQとRANK.AVGの2種類が用意されており、同じ値がある場合の処理方法が異なります。

RANK関数の基本構文

RANK関数(およびRANK.EQ関数)は、指定した値が範囲内で何番目かを返します。

=RANK(数値, 参照, [順序])

引数の説明

引数説明必須/任意
数値順位を調べたい値またはセル必須
参照順位を計算する範囲必須
順序0または省略で降順、1で昇順任意

降順と昇順の違い

順序動作用途
0(または省略)大きい値から順位付け売上ランキング、成績順位
1小さい値から順位付けタイムランキング、コスト順位

基本的な使い方:売上順位を求める

担当者別の売上データに順位を付ける例です。

A列:担当者B列:年間売上C列:順位
田中15800000
佐藤12300000
山田18500000
鈴木9800000
高橋16200000

C2セルに以下の数式を入力し、C6までコピーします。

=RANK(B2, $B$2:$B$6)

結果は以下のとおりです。

担当者年間売上順位
田中158000003
佐藤123000004
山田185000001
鈴木98000005
高橋162000002

参照範囲を$B$2:$B$6と絶対参照にすることで、数式をコピーしても範囲がずれません。

昇順で順位を付ける

タイムや費用など、小さい値が良い場合は第3引数に1を指定します。

=RANK(B2, $B$2:$B$6, 1)

この場合、最も小さい値が1位になります。

RANK.EQとRANK.AVGの違い

Excel 2010以降では、RANK関数の代わりにRANK.EQとRANK.AVGが推奨されています。

RANK.EQ関数

RANK.EQ関数は、同じ値がある場合に上位の順位を返します。従来のRANK関数と同じ動作です。

=RANK.EQ(数値, 参照, [順序])

RANK.AVG関数

RANK.AVG関数は、同じ値がある場合に平均の順位を返します。

=RANK.AVG(数値, 参照, [順序])

動作の比較

以下のデータで2つの関数の結果を比較します。

A列:氏名B列:点数C列:RANK.EQD列:RANK.AVG
田中8511
佐藤7833.5
山田7833.5
鈴木9211
高橋9211

この例では92点が2人、78点が2人います。

RANK.EQ関数は同点の場合に上位の順位(小さい番号)を返します。92点の2人はともに1位、78点の2人はともに3位になります。2位が飛ばされる点に注意してください。

RANK.AVG関数は同点の場合に平均の順位を返します。78点の2人は本来3位と4位ですが、平均の3.5位が返されます。

どちらを使うべきか

場面推奨関数
一般的なランキング表RANK.EQ
統計的な分析RANK.AVG
順位が飛ばない方がよい場合RANK.AVG
従来のRANK関数と同じ動作が必要な場合RANK.EQ

実務では、RANK.EQ関数を使うケースが多いです。

同順位の処理テクニック

同じ値がある場合に順位が重複しないようにする方法を紹介します。

COUNTIF関数で重複順位を解消する

RANK.EQ関数とCOUNTIF関数を組み合わせて、同順位のデータに連番を振ります。

=RANK.EQ(B2, $B$2:$B$10) + COUNTIF($B$2:B2, B2) - 1

この数式は、同じ値が複数ある場合に、データの出現順で順位をずらします。最初に出てきた値はそのままの順位、2番目以降は+1、+2…と加算されます。

結果の例

氏名点数RANK.EQ修正後順位
田中8522
佐藤7844
山田9211
鈴木7845
高橋8523

佐藤と鈴木は同じ78点ですが、修正後は4位と5位に分かれます。

条件付きの順位付け

特定のグループ内での順位を求めたい場合は、COUNTIFS関数を使った方法が有効です。

部門内での順位

各部門内での売上順位を求めます。

A列:部門B列:担当者C列:売上
営業1課田中5200000
営業2課佐藤3800000
営業1課山田4800000
営業2課鈴木4100000
営業1課高橋6100000

D2セルに以下の数式を入力します。

=COUNTIFS($A$2:$A$6, A2, $C$2:$C$6, ">" & C2) + 1

この数式は、同じ部門内で自分より売上が大きいデータの件数を数え、1を加えることで順位を算出します。

部門担当者売上部門内順位
営業1課田中52000002
営業2課佐藤38000002
営業1課山田48000003
営業2課鈴木41000001
営業1課高橋61000001

よくあるエラーと対処法

参照範囲の絶対参照忘れ

RANK関数で最も多いミスは、参照範囲を絶対参照にし忘れることです。

# 間違い(コピーすると範囲がずれる)
=RANK(B2, B2:B10)

# 正しい
=RANK(B2, $B$2:$B$10)

#N/Aエラー

参照範囲内に数値でないセルがある場合や、数値引数が範囲内に存在しない場合に発生します。データに空白や文字列が混在していないか確認してください。

順位が飛ぶ問題

RANK.EQ関数では同順位のデータがあると順位が飛びます。これは仕様です。連続した順位が必要な場合は、前述のCOUNTIF関数を組み合わせた方法を使用してください。

まとめ

RANK関数は、データに順位を付ける基本的な関数です。

  • RANK.EQ関数は同じ値に上位の順位を割り当てる
  • RANK.AVG関数は同じ値に平均の順位を割り当てる
  • 参照範囲は必ず絶対参照にする
  • 同順位を解消するにはCOUNTIF関数と組み合わせる
  • 条件付きの順位にはCOUNTIFS関数を活用する
  • 順位が飛ぶのはRANK.EQの仕様であり、エラーではない

なお、RANK関数はGoogle スプレッドシートでも同じ構文で利用できます。成績管理や売上ランキングなど、業務データの順位付けに幅広く活用できる関数です。用途に応じてRANK.EQとRANK.AVGを使い分けましょう。

広告スペース (article-bottom)

あわせて読みたい