いきなり答える備忘録

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

(Excel)2番目に大きい数値を求める方法

 Excelで、複数の数値のうち2番目に大きい数値を求める方法です。なお、ここでの2番目とは「最大値の次に大きい」「重複を除いて2位」であることを指します。最大値が複数個ある場合にその次に大きい数値をどう求めるか、というのがテーマです。


2番目に大きい(最大値の次に大きい)数値を求める方法

LARGE/UNIQUE関数を使う方法

 簡単なのはLARGE関数とUNIQUE関数を組み合わせて使う方法です。
 次の画像ではE3セルにこの2つの関数を使った式を入力し、C列の数値のうち2番目に大きいものを求めています。

 E3セル

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

 まずUNIQUE関数で数値の重複を除き、LARGE関数によりその中の「2位の数値」を求めています。これで「2番目に大きい数値」が得られます。同様にn番目に大きい数値も簡単に求められます。
 なお、LARGE関数のはたらきについては下記備考を参照ください。LARGE関数単体だとこのように最大値が複数ある場合に異なる結果となるため注意が必要です。

LARGE/COUNTIF関数を使う方法

 UNIQUE関数が使えない場合にどうするかですが、1つの案として次のようなものがあります。

 E3セル

=LARGE(C3:C9,COUNTIF(C3:C9,MAX(C3:C9))+1)

 COUNTIF関数とMAX関数を組み合わせて最大値がいくつあるのか(これをmとします)カウントし、LARGE関数で順位がm+1位である数値を求めています。
 次の例と異なり1つの式だけで求められるのがメリットですが、拡張性がなく3番目以降を求められないのが欠点です。

作業列を設ける方法

 これもUNIQUE関数がない場合の対応策です。手間はかかりますが1つ上の例と異なりn番目の数値まで求められます。
 次の画像では作業列としてD列を設け、D3セルに次のような式を入力してC9までフィルコピーしています。

 D3セル(下方にフィルコピー)

=IF(COUNTIF(C$3:C3,C3)=1,C3,"")

 絶対参照($)を使っています。これにより各行において「その行の数値が、その行からみて上方(その行を含む)にいくつあるか」がカウントされます。結果が1だったら(=その行の数値は初めて出現したものである)その数値を、そうでなければ空文字列("")を出力します。



 これにより数値の重複を除いた結果が得られますので、あとは最初の例と同様にLARGE関数を使えば最大値の次に大きい数値が求められます。
 3番目以降の数値も同様に求められます。

備考:単純にLARGE関数を使った場合

 次の画像では、LARGE関数を使い、C列に並んでいる点数(重複がない)のうち大きい順で2位の数値を求めています。

 E3セル

=LARGE(C3:C9,2)

 LARGE関数で対象範囲と順位を指定すれば、その順位に該当する数値を求めることができます。この場合は「最大値の次に大きい数値」を求められていますが……



 注意すべきなのは最大値が複数あるケースです。
 次の画像では点数の最大値(10)が3つあり、E3セルの式は上記と同じです。
 このとき、式の結果は最大値である「10」となります。

 この結果は「最大値の次に大きい数値」と異なります。また、一般的な順位の数え方に基づけば(1位タイが3人いて2位は存在しないはずなので)適当な戻り値がなさそうにも見えますが、それとも異なる結果となります。