Menu

RANK関数の使い方: RANK.EQ、RANK.AVGと同順位の扱い

=RANK.EQ(B2,$B$2:$B$7)は、B2:B7の値の中でB2が何位かを、最大値を1位として返します。3つ目の引数に1を加えると、最小値が1位になります。同じ値は同じ順位になり、COUNTIFSを使えばグループ内の順位も出せます。

このページのシートはすべて実際に動きます。数値や数式を変えると再計算されます。

=RANK.EQ(B2,$B$2:$B$7)は、B2:B7の値の中でB2が何位かを、最大値を1位として返します。最小値を1位にするには、3つ目の引数に1を加えます:=RANK.EQ(B2,$B$2:$B$7,1)。

売上を両方向から順位付けする
C2
ABCD
1NameSalesRank (high = 1)Rank (low = 1)
2Ana420034
3Ben310052
4Cleo560016
5Dan280061
6Eve490025
7Finn370043
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

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は、並んだ各値にそれらが共有する順位の平均を付けます。

同点の点数
C3
ABCDE
1NameScoreRANK.EQRANK.AVGUnique rank
2Ana95111
3Ben88232
4Cleo88233
5Dan76555
6Eve88234
7Finn64666
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

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を足します:

地域ごとの順位
D2
ABCD
1NameRegionSalesRank in region
2AnaNorth42003
3BenSouth31003
4CleoNorth56001
5DanSouth28004
6EveNorth49002
7FinnSouth37001
8GiaNorth39004
9HalSouth33002
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

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を参照)。

上位3人の名前
F2
ABCDEF
1NameSalesRankPlaceName
2Ana420031Cleo
3Ben310052Eve
4Cleo560013Ana
5Dan28006
6Eve49002
7Finn37004
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

C列は同順位の節で作った一意の順位なので、同点があっても順位が空くことはありません。F2からF4にはCleo、Eva、Anaが並びます。Anaの売上を6000に変えると、Anaが先頭に移ります。

やってみよう: 速い順に並べる

400 mのタイム(秒)
C2
ABC
1RunnerTimeRank
2Ana58.4
3Ben55.1
4Cleo61.9
5Dan53.7
6Eve57.3
7Finn60.2
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

やってみよう: C2に、B2のAnaのタイムがB2:B7のすべてのタイムの中で何位かを、いちばん速い(小さい)タイムを1位として求めてください。数式はC7まで下にコピーされるので、リストは絶対参照にします。

クラス内の順位
D2
ABCD
1StudentClassScoreRank in class
2AnaRed81
3BenRed92
4CleoBlue77
5DanRed69
6EveBlue95
7FinnRed85
8GiaBlue88
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

やってみよう: D2に、Anaの点数が自分のクラス(B列)の生徒の中だけで何位かを、最高点を1位として求めてください。数式はD8まで下にコピーされます。

よくある間違い: 相対参照の範囲

$記号がないと、数式をコピーするたびに範囲が1行ずつ下にずれるので、各行は自分の行から始まる縮んでいくリストの中で順位付けされます。順位はもっともらしく見えますが、間違っています:

範囲がずれて順位が間違う
C4
ABC
1NameSalesRank
2Ana42003
3Ben31004
4Cleo56001
5Dan28003
6Eve49001
7Finn37001
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

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関数はありません。

Coddyのプログラミング言語のイラスト

Coddyでコードを学ぼう

始める