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 サポートの各関数ページの記載です。

確かめて分かったこと

  1. RANK と RANK.EQ は同じ結果でした。 サンプル表の8行すべてで値が一致しました。
  2. RANK.AVG は整数にならないことがあります。 同点が偶数人のときは 1.5 のように小数になります(同点2人)。3人のときは 4 のように整数でした。
  3. RANK.EQ の数値は、範囲に無い値だと #N/A になりました。 「80点なら何位に入るか」を調べる用途には、COUNTIF に 1 を足す式が使えます。
  4. LARGE と MATCH だけで名前を取り出すと、同点の2人目が出てきませんでした。 サンプルでは 1番目と2番目がどちらも「井上」になりました。
  5. 「3位以内」は3人とは限りません。 サンプルでは 3位が3人いるため、RANK.EQ の順位が 3 以下の人は5人でした。
  6. 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期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?