いきなり答える備忘録

G Suite・Microsoft 365・LibreOfficeなどに関するメモと日々の実験

(Gスプレッドシート)上位n位までのデータを抽出する

 Googleスプレッドシートで、指定した順位までのデータを抽出する方法についてです。
 単に「n位に相当する数値」を取得するのではなく(これはLARGE関数などで簡単に出ます)、上位n位までの順位表(ランキング表)を作成するものとします。

  • SORTN関数を使って、指定した基準に基づく上位n位までのデータ(リスト)を取得することができます。
  • 同順位(順位タイ)の取り扱いも指定できます。

手順

n位と同順位のものをすべて抽出する場合

f:id:accs2014:20200714234139p:plain:right:w550

 画像ではF3セルに式を入力することにより、B,C列に記録されたデータから「得点」の数値の大きい順に上位5位までを抽出しています。
 なお、5位タイの者についてはすべて抽出するものとしているため、結果的に6人が抽出されています。
 F3セルの式は次のようになっています。

 F3セル

=SORTN(B3:C12,5,1,2,FALSE)

 SORTN関数を使っています。表をソートしたうえで抽出する行数や同順位の取り扱いを指定できる強力な関数です。
 第2引数で抽出する順位(5)を指定し、第3引数では同順位の取り扱い(1…指定した順位つまり5位とタイのものをすべて抽出する)を指定しています。
 第4引数はソートの基準となる列(2…左から2番目の列つまりC列)で、第5引数はソートの基準(FALSE…降順つまり大きい順)の指定です。
 第3引数が大きなポイントで、これにより単に5つの行を抽出するのではなく5位と同順位の者をすべて抽出できています。なお、4位の者が3人いるようなケースではその3人までが抽出されます。
 

f:id:accs2014:20200714234146p:plain:right:w550

 ここではさらに順位を表示させています。
 上記のF3セルの式に加え、E3セルに次のように入力しています。

 E3セル

=ARRAYFORMULA(RANK(SORTN(C3:C12,5,1,1,FALSE),C3:C12))

 SORTN関数を使ってC列から1位~5位タイまでの点数を抽出し、RANK関数で順位に変換しています。ちょっと凝りすぎの感もありますが。

同順位があってもn個のデータだけを抽出する場合

f:id:accs2014:20200714234151p:plain:right:w550

 データは上記の例と同じです。
 こちらでは5位タイの者がいてもカットし、必ず5人だけを抽出するものとしています。
 F3セルの式は次のとおりです。

 F3セル

=SORTN(B3:C12,5,0,2,FALSE)

 最初の例との違いは第3引数(0…指定した順位と同じ数しか抽出しない)です。これにより5位タイがいるにもかかわらず5人しか抽出されていません。
 なお、同順位の中では(元の表の)上の方にあるものから順に抽出されます。