いきなり答える備忘録

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

(Gスプレッドシート)2番目に大きい数値を求める方法

 Googleスプレッドシートで、数値のうち2番目に大きいものを求める方法についてです。
 「2番目」の具体的な意味として「順位が2位のもの」の場合と「最大値の次に大きいもの」の場合が考えられますのでそれぞれ紹介します。また、同様にn番目に大きい数値を求めることも可能です。

「2位の数値」を求める方法

LARGE関数を使う方法

 次の画像では、C3:C9の範囲に点数の数値が並んでいます(点数の重複がない点に注意)。
 E3セルに数式を入力して、点数のうち大きい順に数えて2位にあたるものを抽出しています。

 E3セル

=LARGE(C3:C9,2)

 LARGE関数を使い、対象となる数値と順位nを指定することで、n番目に大きい数値を抽出することができます。



 注意する必要があるのは最大値が複数存在する場合です。
 次の画像では上記と同じ式で2位の点数を求めようとしていますが、結果は最高点である「10」となっています。データ中に最高点(10)が複数(3つ)あることが原因です。

 通常の順位付けの仕方でいうと、このデータでは1位(タイ)の点数が3つあり、その次は4位になることから2位の点数というのは存在しません。しかしLARGE関数はこのようなケースでタイの数値を返すようになっています。

存在しない順位について特別の表示をする場合

 上記のように通常の順位付けで2位の数値が存在しない場合に、そのことを示す文字列を返すという例です。

 E3セル

=XLOOKUP(2,ARRAYFORMULA(COUNTIF(C3:C9,">"&C3:C9)+1),C3:C9,"該当なし")

 それぞれの数値が通常の順位付けで何位になるのかを求め、そこからXLOOKUP関数で「2」を検索して対応するC3:C9中の数値を取得します。検索値である「2」が存在しない場合は「該当なし」が返ります。 
 もちろん2位だけでなく他の順位でも、その順位が存在しない場合は「該当なし」が返ります。



 もちろん通常の順位付けでその順位の数値が存在する場合は、その数値が返ります。

 


 上記の式では「ARRAYFORMULA(COUNTIF(C3:C9,">"&C3:C9)+1)」の部分で「通常の順位付け」をした結果を得ています。その部分だけ実行すると次のようになります。

 


 注意点として数値の個数より大きい順位を指定した場合も「該当なし」が返ります。その場合にLARGE関数と同様に「#NUM!」エラーを返す場合は次のようにします。

=IF(2>COUNT(C3:C9),#NUM!,XLOOKUP(2,ARRAYFORMULA(COUNTIF(C3:C9,">"&C3:C9)+1),C3:C9,"該当なし"))

「最大値の次に大きい数値」を求める方法

 最大値が複数ある場合でもその次に大きい数値を求める方法です。
 次の画像では最高点(10)が複数(3つ)存在しますが、UNIQUE関数を使った式により、最高点の次に高い点数を求めています。

 E3セル

=LARGE(UNIQUE(C3:C9),2)

 UNIQUE関数を使い、数値の重複を除いてそれぞれ1つずつ残した結果を得ています。
 あとはLARGE関数を使ってそこから2位の数値を得ることで、最大値の次に大きい数値を取得しています。
 LARGE関数の第2引数を変えるだけで(重複を除いて)n番目に大きい数値を取得できます。