グループごとの順位付け(RANKIFの代用)をCOUNTIFSで行う方法

部署ごと、クラスごとなど「グループの中での順位」を出したいのに、Excelには「RANKIF」のような専用関数はありません。全体でRANK関数を使うと、グループをまたいだ順位になってしまいます。結論から言うと、COUNTIFS関数を使えば、RANK関数がなくてもグループ内順位を計算できます。この記事ではその考え方と数式を解説します。

目次

部署別テスト結果のサンプル

次のような部署別のテスト結果があるとします。A列が部署、B列が氏名、C列が点数です。D列に部署ごとの順位(点数が高い人が1位)を求めます。

A(部署) B(氏名) C(点数) D(部署内順位)
2 営業 佐藤 82 1
3 営業 鈴木 68 3
4 総務 田中 91 1
5 総務 山本 91 1
6 営業 高橋 75 2

COUNTIFSで「自分より点数が高い、同じ部署の人数」を数える

順位とは、突き詰めると「自分より成績が良い人が何人いるか」に1を足した数のことです。RANK関数で同順位を考慮した順位付けをする方法で扱ったRANK.EQ関数はこの考え方を全体に対して行いますが、COUNTIFS関数を使えば「同じ部署の人だけ」に絞って同じ計算ができます。D2セルに次の数式を入力します。

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

A列(部署)がA2(自分の部署)と一致し、かつC列(点数)がC2(自分の点数)より大きい行の数を数えています。「自分より点数が高い、同じ部署の人」の人数に1を足すことで、自分の順位になります。この数式をD6までコピーします。

営業の佐藤(82点)は、同じ営業の中で82点より高い人がいないため0+1で1位。鈴木(68点)は佐藤(82点)と高橋(75点)の2人が上にいるため2+1で3位です。総務の田中と山本はどちらも91点で、お互いより高い人はいないため、2人とも1位(同順位)になります。

よくあるつまずきポイント

  • 同順位のときに次の順位が飛ぶ・飛ばないか: 上の数式はRANK.EQ関数と同じ「同順位の次は欠番」方式です(総務が2人とも1位なら、次にランクインする人がいれば3位になります)。欠番にせず連番にしたい場合は、同じ部署・同じ点数の中での通し順(行番号など)を加点材料として使う工夫が必要です。
  • 部署名の表記ゆれ: 「営業」と「営業部」のように表記が微妙に違うと別グループとして扱われ、正しく集計されません。プルダウン(入力規則)で部署名を選択式にしておくと表記ゆれを防げます。
  • 降順(点数が高いほど1位)と昇順(タイムが短いほど1位)の使い分け: 上の数式は点数が高いほど上位になる降順の例です。タイム計測など「小さいほど上位」にしたい場合は、不等号を">"から"<"に変えます。

まとめ

ExcelにRANKIF関数はありませんが、COUNTIFS関数で「同じグループ・自分より上の人数」を数えて1を足せば、グループごとの順位付けが実現できます。複数条件の考え方はCOUNTIFSで複数条件を満たすセルの個数を数える方法でも扱っているので、あわせて確認してみてください。重複データから最新のものだけを抽出したい場合は重複データの中から「最新の日付」のものだけを抽出する方法、カンマ区切りの回答を集計したい場合はアンケートの複数回答(カンマ区切り)をCOUNTIFで集計する方法も参考にしてください。

目次