順位の順番に並べ替えたい(同順位あり)

得点から順位を出すことは,RANK関数を使えば簡単にできます。
では,順番に並べ替えた表を作るには,どうしたらよいのでしょうか?

(1)重複がないとき(同順位がない)


A2には,当然,RANK関数を使って
=RANK(C3,$C$2:$C$11)
と入力します。
これをA11まで,コピーします。

それで,右の表ですが,
順位は,普通に1〜10まで入力します。
F2には,
=VLOOKUP($E2,$A$2:$C$11,2,FALSE)
と入力し,それをF11までコピー。
G2には,
=VLOOKUP($E2,$A$2:$C$11,3,FALSE)
と入力し,それをG11までコピー。

VLOOKUP関数を使って,その順位のデータを表示しています。
順位が,順番に並んでいるので,データも順番に並びます。

では,重複があるとき(同順位)は,どうしたらよいのでしょうか?


(2)重複があるとき(同順位がある)

左の表は,同じ順位が何カ所か出てきています。
これを先ほどの方法で行うと,同じ順位がある場合は,一番最初に出てくる人しか表示されません。
つまり,3位だと,2カ所とも「徳川 家光」が表示されてしまいます。

では,右の表のように表示するには,どうしたらよいのでしょうか?

これには,ちょっとした工夫が必要になります。
並び替えには,VLOOKUP関数を使いたいのですが,問題は順位です。
同じ順位であっても,違う数値ならVLOOKUP関数で探し出すことができます。

ということで,
左の表のA2に,
=RANK(C2,$C$2:$C$11)+ROW()/9^7
と入力し,A11までコピーします。
これで同じ順位でも,行数を足すことで,違う数値になります。
(ここでは,この順位のことを「疑似順位」と言うことにします。)
見栄えをよくするために,A2〜A11まで,セルの書式設定を数値にし,小数点以下の桁数を0にします。
こうすることで,四捨五入されて,整数で表示されます。

ここまでが,第1段階です。

【説明】

計算式は,順位に,行数を9の7乗(4782969)で割った小数を足してあります。
(このことを,ここでは「疑似順位」と呼びます。)
こうすることで,同じ順位でも違う数値になります。
小数の表示桁数を0にしたことで,表示は整数になり,順位を表していることになります。

なぜ,「9の7乗(4782969)で割るか?」ということですが,
上の表限定なら,23(11*2+1)で割ってもいいです。
11行目の時,ROW() / 23 は,0.478・・・ となるので,表示される順位は変わりません。
0.5以上になると,四捨五入されて表示される順位が1つ上がってしまいます。

じゃあ,「9の7乗って何か?」という話ですが,
同じように,最大行が1048576なので,その2倍+1,つまり,2097153でかまいません。
ただ,これを入力するのが面倒なのと,見た目にわかりにくいので,
9の累乗で,2097153を上回る数値として,9^7 を使っています。

第2段階では,右の表の順位部分です。
ここには,直接数値を入れず,次の関数を入力します。
E2に,
=SMALL($A$2:$A$11,ROW(A1))
と入力し,E11までコピーします。
こうすることで,小さい数値から順番に並び替えることができます。

 【説明】

SMALL関数は,小さい方から○番目の数値を求める関数です。
本来は,
E2に,=SMALL($A$2:$A$11,1)
E3に,=SMALL($A$2:$A$11,2)
E4に,=SMALL($A$2:$A$11,3)
と順番に入力します。
ROW関数は,そのセルの行番号が返します。
これを使って,相対参照($を付けない表し方)で数式をコピーすると,
数値が自動で1ずつ増えていくので,手間を省くためにROW関数を使っています。

あと,F列とG列は,先ほどのVLOOKUP関数を使って,入力すればよいです。