得点から順位を出すことは,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関数を使って,入力すればよいです。