部署ごと、クラスごとなど「グループの中での順位」を出したいのに、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で集計する方法も参考にしてください。





