=RANK.EQ(B2,$B$2:$B$7)は、B2:B7の値の中でB2が何位かを、最大値を1位として返します。最小値を1位にするには、3つ目の引数に1を加えます:=RANK.EQ(B2,$B$2:$B$7,1)。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Name | Sales | Rank (high = 1) | Rank (low = 1) |
| 2 | Ana | 4200 | 3 | 4 |
| 3 | Ben | 3100 | 5 | 2 |
| 4 | Cleo | 5600 | 1 | 6 |
| 5 | Dan | 2800 | 6 | 1 |
| 6 | Eve | 4900 | 2 | 5 |
| 7 | Finn | 3700 | 4 | 3 |
Cleoは売上がいちばん多いので、C列では1位、D列では6位です。Danの売上を6000に変えると、すべての順位が更新されます。
RANK.EQ関数の構文
=RANK.EQ(number, ref, [order])
number(数値): 順位を付ける値で、たいていは同じ行のセルです。ref(参照): 順位を付けるリストです。数式を下にコピーしてもすべての行で同じになるよう、絶対参照($B$2:$B$7)にします。order(順序): 省略するか0なら降順(最大が1位)、1なら昇順(最小が1位)です。
refの中の文字列と空のセルは無視されます。numberがrefの中にまったくないと、RANK.EQは#N/Aを返します。
RANK.EQとRANK.AVGはExcel 2010で登場しました。古いRANK関数も今も動き、RANK.EQと同じ結果を返します。Googleスプレッドシートには3つともあります。
同順位: RANK.EQとRANK.AVG
値が並んだとき、RANK.EQはすべてに同じ順位を付け、それらが占めた順位を飛ばします。スポーツの成績と同じで、2位が2人いれば次は4位です。RANK.AVGは、並んだ各値にそれらが共有する順位の平均を付けます。
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Name | Score | RANK.EQ | RANK.AVG | Unique rank |
| 2 | Ana | 95 | 1 | 1 | 1 |
| 3 | Ben | 88 | 2 | 3 | 2 |
| 4 | Cleo | 88 | 2 | 3 | 3 |
| 5 | Dan | 76 | 5 | 5 | 5 |
| 6 | Eve | 88 | 2 | 3 | 4 |
| 7 | Finn | 64 | 6 | 6 | 6 |
Ben、Cleo、Evaは88点で並んでいます。RANK.EQは3人全員に2を、Danに5を付けます。RANK.AVGは2位、3位、4位の平均の3を付けます。
E列はリスト内の順番で同順位を解消しています。COUNTIF($B$2:B2,B2)は、先頭からこの行までにその点数が何回出てきたかを数えます(コピーすると範囲の終わりだけが動きます)。1つ目の88は0を、2つ目は1を、3つ目は2を足すので、1から6までの順位がちょうど1回ずつ現れます。「3位は誰か」のように順位を検索に使うときは、この形を使ってください。検索するには各順位が一意である必要があるからです。
グループ内の順位
RANKIFはありません。各営業担当者を同じ地域の人の中だけで順位付けするには、その地域で自分より多く売った人の数を数えて1を足します:
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Name | Region | Sales | Rank in region |
| 2 | Ana | North | 4200 | 3 |
| 3 | Ben | South | 3100 | 3 |
| 4 | Cleo | North | 5600 | 1 |
| 5 | Dan | South | 2800 | 4 |
| 6 | Eve | North | 4900 | 2 |
| 7 | Finn | South | 3700 | 1 |
| 8 | Gia | North | 3900 | 4 |
| 9 | Hal | South | 3300 | 2 |
NorthではCleoが、SouthではFinnが1位です。Anaの地域をSouthに変えると、Northの順位が詰まり、Southは5人になります。グループ内で昇順の順位にするには、代わりに"<"&C2を使います。同じ値はRANK.EQと同じように扱われ、同じ順位になります。複数の条件で数える方法はCOUNTIFSのページにあります。
順位で上位3位を表示する
順位の列は「この人は何位か」に答えます。「1位は誰か」に答えるには、順位を検索します。C列に一意の順位があれば、=XLOOKUP(1,C2:C7,A2:A7)は1位の名前を返します(Excel 2019以前では=INDEX(A2:A7,MATCH(1,C2:C7,0)))。順位の列がなくても、=LARGE(B2:B7,2)は2番目に大きい値を直接返し、=SORTBY(A2:B7,B2:B7,-1)は表全体を大きい順に並べます(Excel 2021かMicrosoft 365。SORTとSORTBYを参照)。
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Name | Sales | Rank | Place | Name | |
| 2 | Ana | 4200 | 3 | 1 | Cleo | |
| 3 | Ben | 3100 | 5 | 2 | Eve | |
| 4 | Cleo | 5600 | 1 | 3 | Ana | |
| 5 | Dan | 2800 | 6 | |||
| 6 | Eve | 4900 | 2 | |||
| 7 | Finn | 3700 | 4 |
C列は同順位の節で作った一意の順位なので、同点があっても順位が空くことはありません。F2からF4にはCleo、Eva、Anaが並びます。Anaの売上を6000に変えると、Anaが先頭に移ります。
やってみよう: 速い順に並べる
| A | B | C | |
|---|---|---|---|
| 1 | Runner | Time | Rank |
| 2 | Ana | 58.4 | |
| 3 | Ben | 55.1 | |
| 4 | Cleo | 61.9 | |
| 5 | Dan | 53.7 | |
| 6 | Eve | 57.3 | |
| 7 | Finn | 60.2 |
やってみよう: C2に、B2のAnaのタイムがB2:B7のすべてのタイムの中で何位かを、いちばん速い(小さい)タイムを1位として求めてください。数式はC7まで下にコピーされるので、リストは絶対参照にします。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Student | Class | Score | Rank in class |
| 2 | Ana | Red | 81 | |
| 3 | Ben | Red | 92 | |
| 4 | Cleo | Blue | 77 | |
| 5 | Dan | Red | 69 | |
| 6 | Eve | Blue | 95 | |
| 7 | Finn | Red | 85 | |
| 8 | Gia | Blue | 88 |
やってみよう: D2に、Anaの点数が自分のクラス(B列)の生徒の中だけで何位かを、最高点を1位として求めてください。数式はD8まで下にコピーされます。
よくある間違い: 相対参照の範囲
$記号がないと、数式をコピーするたびに範囲が1行ずつ下にずれるので、各行は自分の行から始まる縮んでいくリストの中で順位付けされます。順位はもっともらしく見えますが、間違っています:
| A | B | C | |
|---|---|---|---|
| 1 | Name | Sales | Rank |
| 2 | Ana | 4200 | 3 |
| 3 | Ben | 3100 | 4 |
| 4 | Cleo | 5600 | 1 |
| 5 | Dan | 2800 | 3 |
| 6 | Eve | 4900 | 1 |
| 7 | Finn | 3700 | 1 |
C4をクリックしてください。範囲がB4:B9なので、Cleoは自分の行から下の人とだけ比べられています。CleoのほうがEvaより多く売っているのにEvaが1位と表示され、Finnは自分1人とだけ比べられているので1位と表示されます。C2を=RANK.EQ(B2,$B$2:$B$7)に変えると、列全体が正しくなります。範囲にカーソルを置いてF4キーを押すと$記号が付きます(MacではCmd+TかFn+F4)。理由は絶対参照で説明しています。
よくある質問
Excelで数値に順位を付けるには?
=RANK.EQ(B2,$B$2:$B$7)を使い、下にコピーします。最大値が1位になります。コピーしても範囲がずれないよう、範囲には$記号を付けておきます。
Excelで小さい順に順位を付けるには?
3つ目の引数に1を加えます:=RANK.EQ(B2,$B$2:$B$7,1)。レースのタイム、価格など、いちばん小さい値を1位にしたいときに使います。
RANK.EQとRANK.AVGの違いは何ですか?
違いは同じ値があるときだけです。2つの値が2位で並ぶと、RANK.EQは両方に2を、次の値に4を付けます。RANK.AVGは両方に2位と3位の平均の2.5を付けます。
Excelで重複しない順位を付けるには?
その値の累計の件数を足します:=RANK.EQ(B2,$B$2:$B$7)+COUNTIF($B$2:B2,B2)-1。同じ値の1つ目はその順位のままで、2つ目は次の順位になります。
Excelでグループ内の順位を付けるには?
同じグループで自分より大きい値の数を数えて1を足します:=COUNTIFS($A$2:$A$9,A2,$C$2:$C$9,">"&C2)+1。RANKIF関数はありません。