いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Gスプレッドシート)RANK関数で順位を求める

 Googleスプレッドシートで、数値の大小に基づき順位を求める際に用いるRANK関数の使い方についてです。

  • RANK関数を使って、ある数値がデータ(範囲)の中で何位にあたるのかを求めることができます。

使用例

 次の画像ではD3セルにRANK関数を使った式を入力し、C3セルの点数がC3:C12の範囲内の点数の中で何位になるのかを求めています。
 C3セルの「85」という値は、点数が大きい順にみて「92」「88」に次ぐ3位の値なので、結果は「3」と求められています。

 D3セル

=RANK(C3,C3:C12)

 第1引数で順位を求める値を、第2引数で比較対象となるデータ(第1引数の値を含める)を指定します。
 値が最も大きいものの順位が1となります。



 次の画像ではARRAYFORMULA関数と組み合わせてすべての点数の順位を求めています。
 同じ点数が複数ありますがそれらは同じ順位となり、順位の空き番が生じている(5位と9位がない)のがわかります。この辺りは一般的な順位のつけ方と同じです。

 D3セル

=ARRAYFORMULA(RANK(C3:C12,C3:C12))

 ちょっと複雑な式ですが、これにより次の10個の式を同時に実行したのと同じ結果を得ることができます。

=RANK(C3,C3:C12)
=RANK(C4,C3:C12)
…
=RANK(C12,C3:C12)

 絶対参照を使った式を10個並べる方法もありますが、こちらの方が式のメンテナンスも容易なので試していただきたいと思います。



 次の画像のデータの内容は上の画像と同じです。
 しかし式の内容を変えて、点数が最も小さいものを1位とする場合の順位を求めています。
  結果は「8」となります。

 D3セル

=RANK(C3:C12,C3:C12,1)

 第3引数を「1」とすることで、値が小さい順に順位を付けた結果を得ることができます。




 ここでもARRAYFORMULA関数と組み合わせてすべての点数の順位を求めています。

 D3セル

=ARRAYFORMULA(RANK(C3:C12,C3:C12,1))

構文

 RANK関数の構文は次のとおりです。最初の2つの引数が必須です。

RANK(値, データ[, 順序])

 第3引数については次の2種類の値を指定できます。省略した場合は0とみなされます。

第3引数の設定値
効果
0値が最も大きいものを1位とする(既定値)
1値が最も小さいものを1位とする

応用例

同じ順位の場合に別の値により差をつける

 基本的にはある1つの値にもとづき順位をつけるものの、同順位の場合は別の値を参照して順位に差をつける例です。いわゆる辞書式順序です。
 次の画像では点数Aと点数B(ともに100点満点とします)の2つの点数があり、点数Aにより順位をつけるものの同じ順位になる場合はさらに点数Bにより評価しています。

 E3セル

=ARRAYFORMULA(RANK(1000*C3:C12+D3:D12,1000*C3:C12+D3:D12))

 ちょっと長い式になっていますが、つまりは点数Aに1000倍のウエイトを付けて評価しています。
 ともに100点満点だから100倍でいいような気もしますが、それだと「点数Aが1で点数Bが0」の者と「点数Aが0で点数Bが100」の者が同順位になってしまう(前者の方が上の順位になるのが正解)ので、より大きいウエイトをつける必要があります。
 ただし点数の種類が多くなると困難になるのがこの方法の難点です。

条件付きの順位を求める

 ある条件を満たすデータだけを対象として順位を求めるケースです。ある列の値でグループを区別して、それぞれのグループ内での順位をつける例が典型的です。
 次の画像ではB列に入力されているチーム名ごとにそれぞれ順位を求めています。

 E3セル

=ARRAYFORMULA(COUNTIFS(B3:B12,B3:B12,D3:D12,">"&D3:D12)+1)

 RANK関数の記事なのでRANK関数で解決したいところですが、FILTER関数などと組み合わせてもうまくいきません。
 そこでCOUNTIFS関数を使い、「同じチームで、かつ点数がより低いもの」をカウントし、それに1を足しています。これで必要な結果を得ることができます。同順位の判定もRANK関数と同様にできることが画像からも確認できます。
 なお、値が小さい方を1位とする場合は不等号を「<」とすればOKです。

順位の空き番がないように順位をつける

 上記の例でもみたように、例えば4位タイの値が2つあるとき、その次の順位は「6」となります。しかしそうせずに順番を詰めて「5」としたい場合があります。
 これに対応する方法については次の記事で紹介しています。

www.officeisyours.com