- 技術 💻
Excel順位関数RANKの使い方|同順位と上位3件の抽出
Excelで順位を付ける関数は RANK.EQ です。書き方は =RANK.EQ(数値,範囲,順序) で、順序を省略すると大きい順、1 を入れると小さい順の順位が返ります。 以前からある RANK 関数も同じ結果を返しますが、Microsoft のサポートページでは RANK.EQ と RANK.AVG への置き換えが案内されています。
この記事では、同じ8人の点数データを使って、RANK.EQ・RANK.AVG・順位を飛ばさない式・同点を連番にする式の結果を1枚の表に並べます。あわせて、LARGE・SMALL で上位3件の値と名前を取り出す数式、組ごとに順位を付ける数式を、コピーしてそのまま使える形で載せました。
確認環境:数式の結果は LibreOffice Calc 24.2.7.2(Linux、ヘッドレス実行)で計算した値です(確認日 2026-10-06)。引数の仕様は Microsoft サポートの RANK.EQ・RANK.AVG・RANK・LARGE・SMALL 各関数のページの記載にもとづいています。
この記事の結論
- 順位列を作るなら RANK.EQ。同点は同じ順位になり、次の順位は人数分だけ飛びます(1位が2人なら次は3位)。
- 同点を平均の順位にしたいときだけ RANK.AVG。1位が2人なら2人とも 1.5 になります。
- 順位を飛ばしたくない(1、1、2、3…)ときは SUMPRODUCT と COUNTIF の式、同点にも差を付けて連番にしたいときは RANK.EQ に COUNTIF を足す式を使います。
- 順位ではなく「上位3件の値そのもの」が欲しいなら LARGE(下位なら SMALL)。名前も一緒に取り出すなら INDEX と MATCH を組み合わせます。
- 組や部署ごとの順位は
=COUNTIFS(組の列,組,点数の列,">"&点数)+1で求めます。
順位と上位抽出の数式早見表
サンプル表(次の章)の A 列が氏名、B 列が組、C 列が点数、データは 2〜9 行目という前提です。結果は 2 行目(青木さん・A組・85点)に入れたときの値です。
| やりたいこと | 数式 | 結果 |
|---|---|---|
| 大きい順の順位(同点は同順位、次を飛ばす) | =RANK.EQ(C2,C$2:C$9) |
3 |
| 小さい順の順位 | =RANK.EQ(C2,C$2:C$9,1) |
4 |
| 同点は平均の順位 | =RANK.AVG(C2,C$2:C$9) |
4 |
| 順位を飛ばさない(1、1、2…) | =SUMPRODUCT((C$2:C$9>C2)/COUNTIF(C$2:C$9,C$2:C$9))+1 |
2 |
| 同点でも連番にする(上の行を優先) | =RANK.EQ(C2,C$2:C$9)+COUNTIF(C$2:C2,C2)-1 |
3 |
| 組ごとの順位 | =COUNTIFS(B$2:B$9,B2,C$2:C$9,">"&C2)+1 |
2 |
| 1番大きい値 | =LARGE(C$2:C$9,1) |
92 |
| 3番目に大きい値 | =LARGE(C$2:C$9,3) |
85 |
| 1番小さい値 | =SMALL(C$2:C$9,1) |
60 |
| 3位以内の人数 | =COUNTIF(E$2:E$9,"<=3")(E 列が RANK.EQ の順位) |
5 |
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Excel順位関数RANKの使い方|同順位と上位3件の抽出」
サンプル表(8人の点数)
同点がある場合の違いが分かるように、92点が2人、85点が3人いるデータにしています。氏名はすべて架空です。
| 行 | A:氏名 | B:組 | C:点数 |
|---|---|---|---|
| 2 | 青木 | A | 85 |
| 3 | 井上 | B | 92 |
| 4 | 上田 | A | 78 |
| 5 | 遠藤 | B | 85 |
| 6 | 大野 | A | 92 |
| 7 | 加藤 | B | 70 |
| 8 | 木村 | A | 85 |
| 9 | 工藤 | B | 60 |
セル A1 を選んで貼り付けると同じ表になります(タブ区切り)。
氏名 組 点数
青木 A 85
井上 B 92
上田 A 78
遠藤 B 85
大野 A 92
加藤 B 70
木村 A 85
工藤 B 60
RANK.EQ・RANK.AVG・RANKの書き方と引数
3つの関数は引数が同じです。
=RANK.EQ(数値, 範囲, [順序])
=RANK.AVG(数値, 範囲, [順序])
=RANK(数値, 範囲, [順序])
| 引数 | 必須 | 内容 |
|---|---|---|
| 数値 | 必須 | 順位を調べたい値。ふつうは同じ行の点数のセル(C2) |
| 範囲 | 必須 | 比べる相手になる数値の範囲(C$2:C$9)。下にコピーするので行を $ で固定する |
| 順序 | 省略可 | 0 または省略で大きい順(降順)、0 以外で小さい順(昇順) |
| 関数 | 同点のときに返す順位 | 使う場面 |
|---|---|---|
| RANK.EQ | 同点のうち最も上の順位(85点が3人で 3、3、3) | ふだんの順位付け |
| RANK.AVG | 同点が占める順位の平均(3・4・5位の平均で 4、4、4) | 順位の合計や平均を後で計算する集計 |
| RANK | RANK.EQ と同じ | 以前のブックとの互換のために残されている関数。新しく書く数式は RANK.EQ にする |
Microsoft サポートの RANK 関数のページには、この関数が新しい関数に置き換えられており、今後の版で使えなくなる可能性があるという案内があります。いまある RANK の数式を急いで直す必要はありませんが、これから書く数式は RANK.EQ にそろえておくと迷いません。
同順位の扱い4通りを1枚の表で比べる
同じ点数データに、4種類の数式を入れた結果です。D〜G 列の 2 行目に次の数式を入れ、9 行目までコピーしています。
D2: =RANK.EQ(C2,C$2:C$9)
E2: =RANK.AVG(C2,C$2:C$9)
F2: =SUMPRODUCT((C$2:C$9>C2)/COUNTIF(C$2:C$9,C$2:C$9))+1
G2: =RANK.EQ(C2,C$2:C$9)+COUNTIF(C$2:C2,C2)-1
| 氏名 | 点数 | RANK.EQ | RANK.AVG | 飛ばさない順位 | 同点を連番 |
|---|---|---|---|---|---|
| 青木 | 85 | 3 | 4 | 2 | 3 |
| 井上 | 92 | 1 | 1.5 | 1 | 1 |
| 上田 | 78 | 6 | 6 | 3 | 6 |
| 遠藤 | 85 | 3 | 4 | 2 | 4 |
| 大野 | 92 | 1 | 1.5 | 1 | 2 |
| 加藤 | 70 | 7 | 7 | 4 | 7 |
| 木村 | 85 | 3 | 4 | 2 | 5 |
| 工藤 | 60 | 8 | 8 | 5 | 8 |
読み取れることを整理します。
- RANK.EQ:92点の2人が1位、次は2位を飛ばして3位。85点の3人が3位で、次は6位です。最後の順位は人数と同じ 8 になります。
- RANK.AVG:92点の2人は「1位と2位の平均」で 1.5、85点の3人は「3・4・5位の平均」で 4 です。順位を全員分足すと 36(1〜8 の合計)になり、同点があっても合計が変わりません。
- 飛ばさない順位:自分より大きい「点数の種類」がいくつあるかを数えて 1 を足しています。最後の順位は点数の種類の数(5)になります。
- 同点を連番:RANK.EQ の順位に、「自分の行までに同じ点数が何回出たか − 1」を足しています。同点のなかでは上の行が先の順位になります。
飛ばさない順位の式のしくみ
=SUMPRODUCT((C$2:C$9>C2)/COUNTIF(C$2:C$9,C$2:C$9))+1
(C$2:C$9>C2)は、自分より点数が大きい行で 1、それ以外で 0 になります。COUNTIF(C$2:C$9,C$2:C$9)は、各行の点数が範囲内に何個あるかを返します(92点の行は 2、85点の行は 3)。- 1 をその個数で割って足すと、同じ点数の行を全部合わせてちょうど 1 になります。つまり 「自分より大きい点数が何種類あるか」 が求まります。
範囲に空白のセルが入ると COUNTIF が 0 を返して割り算がエラーになるため、範囲はデータのある行だけにします。
RANK.EQ から平均順位を作る補正式
Microsoft サポートの RANK.EQ 関数のページには、同順位を平均に直す補正係数の式が載っています。RANK.AVG と同じ値になることを確かめました。
=RANK.EQ(C2,C$2:C$9)+(COUNT(C$2:C$9)+1-RANK.EQ(C2,C$2:C$9,0)-RANK.EQ(C2,C$2:C$9,1))/2
青木さん(85点)で計算すると 4 になり、=RANK.AVG(C2,C$2:C$9) の結果と一致します。RANK.AVG が使えるなら、そちらを使うほうが短く書けます。
RANK系とLARGE・SMALLの違いと選び方
混同しやすいのが、順位を返す RANK 系と、値を返す LARGE・SMALL です。「何番目か」を知りたいのか、「何番目の値」を知りたいのかで分かれます。
| 比べる点 | RANK.EQ・RANK.AVG | LARGE・SMALL |
|---|---|---|
| 渡すもの | 値と範囲 | 範囲と「何番目か」 |
| 返すもの | 順位(数値) | その順位にある値 |
| 書き方 | =RANK.EQ(C2,C$2:C$9) |
=LARGE(C$2:C$9,3) |
| 数式の数 | データの行数ぶん | 欲しい件数ぶん(上位3件なら3つ) |
| 同点のとき | 同じ順位が並ぶ | 同じ値が続けて返る |
| 向いている表 | 元の表の横に順位列を足す | 別の場所に上位だけの小さな表を作る |
| 条件 | 選ぶもの |
|---|---|
| 全員の順位を元の表に並べたい | RANK.EQ |
| 同点を平均の順位で集計したい | RANK.AVG |
| 順位を 1、1、2、3 と詰めたい | SUMPRODUCT と COUNTIF の式 |
| 同点にも差を付けて 1〜n の連番にしたい | RANK.EQ に COUNTIF を足す式 |
| 上位3件・下位3件の値だけが欲しい | LARGE・SMALL |
| 上位3件の名前も欲しい | 連番の順位列を作り、INDEX と MATCH で取り出す |
| 組・部署ごとに順位を付けたい | COUNTIFS に 1 を足す式 |
LARGE・SMALLで上位3件・下位3件の値を取り出す
=LARGE(配列, 順位)
=SMALL(配列, 順位)
LARGE は大きいほうから、SMALL は小さいほうから数えて「順位」番目の値を返します。
| 数式 | 意味 | 結果 |
|---|---|---|
=LARGE(C$2:C$9,1) |
1番大きい値 | 92 |
=LARGE(C$2:C$9,2) |
2番目に大きい値 | 92 |
=LARGE(C$2:C$9,3) |
3番目に大きい値 | 85 |
=SMALL(C$2:C$9,1) |
1番小さい値 | 60 |
=SMALL(C$2:C$9,2) |
2番目に小さい値 | 70 |
=SMALL(C$2:C$9,3) |
3番目に小さい値 | 78 |
=SMALL(C$2:C$9,COUNT(C$2:C$9)) |
小さいほうから数えて最後=最大値 | 92 |
2番目に大きい値が 92 になっている点に注目してください。LARGE は同点をまとめず、データを並べ替えたときの「上から何個目」をそのまま返します。
下にコピーして 1、2、3…と順位を増やしたいときは、順位の部分を ROW(A1) にします。
=LARGE(C$2:C$9,ROW(A1))
1つ目のセルでは ROW(A1) が 1 なので 92、下にコピーすると ROW(A2) で 2、ROW(A3) で 3 と増えていきます。
上位3件の合計や平均も、LARGE を条件に使えば求められます。
| 数式 | 意味 | 結果 |
|---|---|---|
=SUMIF(C$2:C$9,">="&LARGE(C$2:C$9,3)) |
3番目の値以上の合計 | 439 |
=AVERAGEIF(C$2:C$9,">="&LARGE(C$2:C$9,3)) |
3番目の値以上の平均 | 87.8 |
=SUMPRODUCT((C$2:C$9>=LARGE(C$2:C$9,3))*1) |
3番目の値以上の件数 | 5 |
3番目の値(85点)が3人いるので、対象は5人になります。「上位3件」を3人ちょうどにしたいのか、3番目と同点の人を全員含めるのかを、先に決めておくと数式を選びやすくなります。
上位3件の名前をINDEXとMATCHで取り出す
値だけでなく名前も取り出したいとき、まず思いつくのは次の形です。
=INDEX(A$2:A$9,MATCH(LARGE(C$2:C$9,1),C$2:C$9,0))
これを 1・2・3 番目について入れると、結果は次のようになります。
| 順位の指定 | LARGE の値 | 取り出した名前 |
|---|---|---|
| 1 | 92 | 井上 |
| 2 | 92 | 井上 |
| 3 | 85 | 青木 |
2番目も「井上」になりました。MATCH は同じ値が複数あっても、最初に見つかった行だけを返すためです。大野さん(92点)が表に出てきません。
同点があるデータでは、同点を連番にした順位列を作り、その順位で探すと全員を取り出せます。G 列に連番の順位を入れておきます。
G2: =RANK.EQ(C2,C$2:C$9)+COUNTIF(C$2:C2,C2)-1 (G9 までコピー)
上位表は、I 列に 1・2・3 と入力し、その横に次の数式を入れます。
I2: 1 J2: =INDEX(A$2:A$9,MATCH(I2,G$2:G$9,0)) K2: =INDEX(C$2:C$9,MATCH(I2,G$2:G$9,0))
I3: 2 J3: =INDEX(A$2:A$9,MATCH(I3,G$2:G$9,0)) K3: =INDEX(C$2:C$9,MATCH(I3,G$2:G$9,0))
I4: 3 J4: =INDEX(A$2:A$9,MATCH(I4,G$2:G$9,0)) K4: =INDEX(C$2:C$9,MATCH(I4,G$2:G$9,0))
| 順位 | 氏名 | 点数 |
|---|---|---|
| 1 | 井上 | 92 |
| 2 | 大野 | 92 |
| 3 | 青木 | 85 |
連番の順位は 1〜8 が1回ずつしか出ないので、MATCH が必ず別の行を返します。同点の優先順は「表の上にある行が先」です。別の基準(たとえば提出日が早い順)で決めたいときは、先に表をその基準で並べ替えておきます。
組ごとに順位を付ける(条件付き順位)
RANK.EQ には条件を付ける引数がありません。組や部署ごとの順位は、「同じ組で、自分より点数が大きい人数」を COUNTIFS で数えて 1 を足します。
H2: =COUNTIFS(B$2:B$9,B2,C$2:C$9,">"&C2)+1
同じ考え方で、組内の連番と、組内で飛ばさない順位も作れます。
I2: =COUNTIFS(B$2:B$9,B2,C$2:C$9,">"&C2)+COUNTIFS(B$2:B2,B2,C$2:C2,C2)
J2: =SUMPRODUCT((B$2:B$9=B2)*(C$2:C$9>C2)/COUNTIFS(B$2:B$9,B$2:B$9,C$2:C$9,C$2:C$9))+1
| 氏名 | 組 | 点数 | 組内順位(H) | 組内の連番(I) | 組内で飛ばさない(J) |
|---|---|---|---|---|---|
| 青木 | A | 85 | 2 | 2 | 2 |
| 井上 | B | 92 | 1 | 1 | 1 |
| 上田 | A | 78 | 4 | 4 | 3 |
| 遠藤 | B | 85 | 2 | 2 | 2 |
| 大野 | A | 92 | 1 | 1 | 1 |
| 加藤 | B | 70 | 3 | 3 | 3 |
| 木村 | A | 85 | 2 | 3 | 2 |
| 工藤 | B | 60 | 4 | 4 | 4 |
A組は 92・85・85・78 の4人なので、組内順位は 1・2・2・4 になります。小さい順の順位にしたいときは、">" を "<" に変えます。
条件なしの順位も同じ形で書けます。=COUNTIF(C$2:C$9,">"&C2)+1 は 3 を返し、=RANK.EQ(C2,C$2:C$9) と同じ結果です。RANK.EQ は「自分より大きい値の個数+1」と覚えておくと、条件を足したいときにすぐ COUNTIFS に書き換えられます。
組ごとの上位の値を取り出す
組の最大値・最小値は MAXIFS・MINIFS で求められます。2番目以降は、条件に合わない行を 0 にしてから LARGE に渡します。
| 数式 | 意味 | 結果 |
|---|---|---|
=MAXIFS(C$2:C$9,B$2:B$9,"B") |
B組の最大値 | 92 |
=MINIFS(C$2:C$9,B$2:B$9,"B") |
B組の最小値 | 60 |
=SUMPRODUCT(LARGE((B$2:B$9="A")*C$2:C$9,2)) |
A組で2番目に大きい値 | 85 |
=SUMPRODUCT(LARGE((B$2:B$9="B")*C$2:C$9,2)) |
B組で2番目に大きい値 | 85 |
(B$2:B$9="A")*C$2:C$9 は、A組の行だけ点数が残り、ほかの行は 0 になります。そのため、この書き方は点数が正の数のときに使えます。SUMPRODUCT で包んでいるのは、配列の計算を通常の Enter だけで確定できるようにするためです。
エラーや意図と違う結果になるとき
| 症状 | 原因 | 直し方 |
|---|---|---|
| 下にコピーすると順位がおかしくなる | 範囲が C2:C9 のままで、コピーのたびに1行ずつずれている |
範囲を C$2:C$9 と行固定にする |
RANK.EQ が #N/A になる |
数値が範囲の中に無い(例:=RANK.EQ(80,C$2:C$9)) |
数値には範囲内のセルを指定する。範囲に無い値の位置を知りたいときは =COUNTIF(C$2:C$9,">"&80)+1 |
LARGE・SMALL が #NUM! になる |
順位が 0 以下、またはデータの個数より大きい | 順位を 1〜データ数の範囲にする。件数が足りない場合に備えるなら =IFERROR(LARGE(C$2:C$9,ROW(A1)),"") |
| 名前の抽出で同じ人が2回出る | 同点があり、MATCH が最初の行だけを返している | 連番の順位列を作り、その順位で MATCH する |
飛ばさない順位の式が #DIV/0! になる |
範囲に空白のセルがあり、COUNTIF が 0 を返している | 範囲をデータのある行だけにする |
LARGE・SMALL のエラー値 #NUM! は Microsoft サポートの各関数ページの記載です。
確かめて分かったこと
- RANK と RANK.EQ は同じ結果でした。 サンプル表の8行すべてで値が一致しました。
- RANK.AVG は整数にならないことがあります。 同点が偶数人のときは 1.5 のように小数になります(同点2人)。3人のときは 4 のように整数でした。
- RANK.EQ の数値は、範囲に無い値だと
#N/Aになりました。 「80点なら何位に入るか」を調べる用途には、COUNTIF に 1 を足す式が使えます。 - LARGE と MATCH だけで名前を取り出すと、同点の2人目が出てきませんでした。 サンプルでは 1番目と2番目がどちらも「井上」になりました。
- 「3位以内」は3人とは限りません。 サンプルでは 3位が3人いるため、RANK.EQ の順位が 3 以下の人は5人でした。
- LARGE の順位にデータ数より大きい値を入れたとき、LibreOffice Calc 24.2 では
#VALUE!が表示されました。 Microsoft サポートのページでは Excel は#NUM!を返すと書かれています。エラーの種類で分岐する数式を2つのソフトで共有するときは、IFERRORでまとめて受けると同じ動きになります。
よくある質問
Q. RANK と RANK.EQ の違いは? A. 結果は同じです。RANK は以前からある関数で、Microsoft のサポートページでは RANK.EQ・RANK.AVG への置き換えが案内されています。新しく書く数式は RANK.EQ にします。
Q. RANK.EQ と RANK.AVG の違いは? A. 同点のときに返す順位が違います。RANK.EQ は同点のうち最も上の順位(1、1、3…)、RANK.AVG は同点が占める順位の平均(1.5、1.5、3…)を返します。同点が無いデータでは同じ結果です。
Q. 同順位を作らず、1から連番にするには?
A. =RANK.EQ(C2,C$2:C$9)+COUNTIF(C$2:C2,C2)-1 を使います。COUNTIF の範囲の終わりだけ $ を付けない(C$2:C2)のがポイントで、同点のなかでは上の行が先の順位になります。
Q. 小さい順(昇順)で順位を付けるには?
A. 3番目の引数に 1 を入れて =RANK.EQ(C2,C$2:C$9,1) と書きます。タイムのように小さいほうが上位になるデータで使います。
Q. 上位3件を取り出したのに同じ名前が並ぶときは?
A. 同点があるためです。同点を連番にした順位列を作り、=INDEX(A$2:A$9,MATCH(1,G$2:G$9,0)) のように順位で探すと、1人ずつ取り出せます。
まとめ
- 順位列は RANK.EQ。RANK と結果は同じで、新しく書く数式は RANK.EQ にそろえる。
- 同点を平均の順位にするときだけ RANK.AVG。
- 順位を飛ばさないなら
SUMPRODUCT((範囲>値)/COUNTIF(範囲,範囲))+1、連番にするならRANK.EQ(...)+COUNTIF(C$2:C2,C2)-1。 - 上位・下位の値そのものは LARGE・SMALL。同点はまとめず、並べ替えた順の値がそのまま返る。
- 名前も取り出すときは、連番の順位列を INDEX と MATCH で探す。
- 組ごとの順位は
COUNTIFS(組の列,組,点数の列,">"&点数)+1。 - 範囲は
C$2:C$9のように行を固定してからコピーする。
参考・出典
- Microsoft サポート「RANK.EQ 関数」「RANK.AVG 関数」「RANK 関数」「LARGE 関数」「SMALL 関数」(support.microsoft.com、2026-10-06 に確認)
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Excel順位関数RANKの使い方|同順位と上位3件の抽出」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。