関数 EXCEL&VBA

エクセルでタイムの順位を表示する方法

順位をつける場合、タイムで言えば「数値のより小さい選手が上位」となりますよね。

今回は、タイムがランダムに並んだ表から、関数を使って自動で順位表を作ってみましょう。
同点、同タイムの場合は同じ順位をつけることも重要なポイントとなります。



タイムで順位をつける

まず、下のようなタイムの一覧を作成します。
並び順は、出席番号など 順位とは直接関係のない順番でよいです。


▲タイムの一覧をつくる

関数をつかって全員に順位をつける

つぎに、表の欄外に各選手の順位を表示させます。

サンプルの場合は、D列に関数をつかった数式を入力して順位を表示させます。
セルD3に入る数式は;

RANK.EQ (C3, $C$3:$C$12, 1) + COUNTIF ($C$3:C3, C3) -1

のようになります。
ここで重要な2つの関数が登場します。

RANK.EQ関数

RANK.EQ関数は、クラスのタイム一覧の中で それぞれのタイム(C列)が全体の何番目になるか(順位)を表します。
今回は「数値のより小さい選手が上位」となるので、順序(数式中のピンクの「」)は「1:昇順」になります。


▲セルD3に「4 (位)」が表示された
※D列は、最終的にはフォントの色を白にして隠します。

COUNTIF関数

上のセルD3の数式の COUNTIF関数 の部分に「???」となった方もいるかもしれませんね。

Point便宜的に「同タイムの場合は行が上の人を上位」にします。
セルD3の数式の COUNTIF関数 の部分では範囲の「始点」は絶対参照 ($C$3)、「終点」は相対参照 (C3)として同じタイムの登場回数によって順位を「+1」することで同順位になることを回避します。

そして、セルD3の数式を 下の行にコピーして、各々の順位を表示させます。


▲D列に全員分の順位が入った!

COUNTIF関数のおかげで、同タイムの「井上・木村」には、便宜的にそれぞれ1・2の数字が振られているのが特徴です。(「田中・羽田」も同様。)

これで順位表づくりの準備は完了です。

順位表をつくる

ここからが本題です。
F列からH列を使って順位表の枠を作ります。


▲ベスト5を表示する順位表

まず、H列にベスト5のタイムを表示させます。
セルH3に入る数式には、SMALL関数をつかいます;

=SMALL ($C$3:$C$12, A3)

このような数式が入ります。
出席番号の数字をうまく利用して、全体のタイム(C列)の中で、1番目(A3)に小さい数字を表示します。
※数式を下の行にコピーするため、C列は絶対参照($C$3:$C$12)にしておきます。

数式を下の行にコピーすると以下のようになります。


▲H列には タイムの速い順に5つのタイムが表示された

つぎに、F列の順位を表示させます。
セルF3には以下のような数式が入ります。

=RANK.EQ (H3, $H$3:$H$7, 1)

ふたたび RANK.EQ関数の登場ですが、今度は順位を算出する 対象が H列 に変わっているのが特徴です。

つまり、タイムが上位5つに絞られたなかで順位を算出します。
当然ながら、F列に表示される順位は、1~5のいずれかになります。(下図)


▲1位のタイム「6.50」は2人いる

最後に、それぞれの順位に対応した「氏名」をG列に表示させるには、2つの関数のコンビネーションが必要です。
セルG4にはこのような数式が入ります;

INDEX ($B$3:$B$12, MATCH (A3, $D$3:$D$12, 0))

MATCH関数 を補助的につかい、 INDEX関数 で正しい「氏名」を導き出します。


▲セルG4には第1位の「井上」が表示された

MATCH関数

まず、補助的に使われた MATCH関数 から説明します。
MATCH関数は「指定したデータが表の何番目にあるか」を調べるときに使います;

=MATCH(検査値, 検査範囲, [照合の型] )

こんな感じで表されます。

セルG4での MATCH関数 の役割は「1位の人(=D列が“1”の人)が一覧表の何番目にいるか?」を調べること。
実際に、セルG4に「=MATCH(A3, $D$3:$D$12, 0)」だけを入れてみたところ、答えは「2」が表示されました。
つまり、1位の人は一覧表の2番目にいる、ってことです。

INDEX関数

つぎに、INDEX関数 を説明します。
INDEX関数は「指定したセル範囲の中から〇行(△列)目にあるデータを抽出」するときに使います。
数式としては;

=INDEX(参照, 行番号, [列番号] , [領域番号])

のように表されます。

今回セルG4に入力した INDEX関数 においては、[列番号] 以降を使用していません。
「参照」の部分がタイム一覧の氏名欄で、「行番号」が MATCH関数 となっています。
セルG4においては、MATCH関数の部分の答えは「2」ということがわかっているので、つまり数式を翻訳すると;
得点一覧表の氏名欄の中で 2番目の氏名(つまり1位の人)は?」と言い換えることができます。

では、セルG4の数式をG8までコピーします。

これで、順位表の完成です。
最後にD列のフォントカラーを白にして仕上げましょう。


▲D列はフォントカラーを白にするか、列を非表示にしてもよい

タイム一覧の記録(タイム)の値を変更すれば、順位表は自動で入れ替わります。

以上で『エクセルタイム順位する方法』は終了。
その他の関連記事と合わせて仕事や趣味に役立ててください。

関連記事・広告






-関数, EXCEL&VBA
-, , , ,