【Excel】RANK関数で同じ順位の場合に条件別で順位付けをするには
Excelには順位付けをするRANK.EQ、RANK.AVG関数があります。
これらの関数は順位を決める数値が同じ場合、表示される結果に違いがあります。
下の画像では合計の数値で順位を計算していますが、同じ得点で同順位になるのがRANK.EQ、平均順位で返すのがRAK.AVGです。
ではこの表で232点で同点だった2名を「実技」の得点が高い方の順位を上にしたい場合、どうしたらよいでしょうか。
方法はいくつかありますのでご紹介します。
■順位を求めた後にCOUNTIFS関数を使う
RANK.EQ関数で順位を出すところまでは通常と同じです。そこから同じ合計得点がいた場合に、その中に実技の得点が自分より高い人が何人いるかCOUNTIF関数で調べ、その数値を加えます。
先ほどの画像の6行目で処理をすると、順位はRANK.EQ関数で求めます。
その後COUNTIF関数を使い、下の2つの条件で件数を探します。
1.合計得点が同じ人数を探す(自分を含め2名に絞られる)
2.実技得点が自分より高い人数を探す(1名に絞られる)
これによって、求められた数値である1を順位の7にプラスします。
セルF3の式は以下のとおりになります。
=RANK.EQ(E3,$E$3:$E$12)+COUNTIFS($E$3:$E$12,E3,$D$3:$D$12,">"&D3)
COUNTIFS関数の引数の意味は
のようになっています。
これによって、6行目の人は合計得点が同点かつ自分より高い実技得点が1つありますので、本来の順位である「7」に1プラスして「8」が表示されることになります。
この関数は仮に同じ合計得点が3名以上いたとしても問題ありませんが、実技まで同じ得点の場合は同じ順位になります。
■条件比較する数値を小数点以下にして順位の数値に加算(減算)する
もう一つは順位決めをする数値に、条件にする数値を小数点にして加算、場合によっては減算することです。
下の画像はF列に実技得点を1000分の1にした数値を足しています。セルF3の数式は「=E3+0.001*D3」です。
ここを100分の1にしてしまうと100点満点だと1になってしまい、実際の得点に影響が出てしまいますので、必ず満点が小数点内に収まるようにしましょう。
後は単純にF列の数値で順位を計算するだけです。
関数はRANK.EQ、RANK.AVGのどちらでも構いませんが、条件付けする数値が同じ場合にどのように表示するかで選びましょう。
なお、欠席などのマイナス評価の数値は引くことで対応できます。
これらの関数は順位を決める数値が同じ場合、表示される結果に違いがあります。
下の画像では合計の数値で順位を計算していますが、同じ得点で同順位になるのがRANK.EQ、平均順位で返すのがRAK.AVGです。
ではこの表で232点で同点だった2名を「実技」の得点が高い方の順位を上にしたい場合、どうしたらよいでしょうか。
方法はいくつかありますのでご紹介します。
■順位を求めた後にCOUNTIFS関数を使う
RANK.EQ関数で順位を出すところまでは通常と同じです。そこから同じ合計得点がいた場合に、その中に実技の得点が自分より高い人が何人いるかCOUNTIF関数で調べ、その数値を加えます。
先ほどの画像の6行目で処理をすると、順位はRANK.EQ関数で求めます。
その後COUNTIF関数を使い、下の2つの条件で件数を探します。
1.合計得点が同じ人数を探す(自分を含め2名に絞られる)
2.実技得点が自分より高い人数を探す(1名に絞られる)
これによって、求められた数値である1を順位の7にプラスします。
セルF3の式は以下のとおりになります。
=RANK.EQ(E3,$E$3:$E$12)+COUNTIFS($E$3:$E$12,E3,$D$3:$D$12,">"&D3)
COUNTIFS関数の引数の意味は
のようになっています。
これによって、6行目の人は合計得点が同点かつ自分より高い実技得点が1つありますので、本来の順位である「7」に1プラスして「8」が表示されることになります。
この関数は仮に同じ合計得点が3名以上いたとしても問題ありませんが、実技まで同じ得点の場合は同じ順位になります。
■条件比較する数値を小数点以下にして順位の数値に加算(減算)する
もう一つは順位決めをする数値に、条件にする数値を小数点にして加算、場合によっては減算することです。
下の画像はF列に実技得点を1000分の1にした数値を足しています。セルF3の数式は「=E3+0.001*D3」です。
ここを100分の1にしてしまうと100点満点だと1になってしまい、実際の得点に影響が出てしまいますので、必ず満点が小数点内に収まるようにしましょう。
後は単純にF列の数値で順位を計算するだけです。
関数はRANK.EQ、RANK.AVGのどちらでも構いませんが、条件付けする数値が同じ場合にどのように表示するかで選びましょう。
なお、欠席などのマイナス評価の数値は引くことで対応できます。