Excel関数 逆引き集 | 上位n件を抽出 → LARGE

Excel VBA Excel
スポンサーリンク

概要

「売上上位3件だけ知りたい」
「テストの上位5人を出したい」
「スコアのランキング上位n件を抜き出したい」

こういう“上位n件”を取るときの基本になるのが LARGE(ラージ)関数です。

LARGE は
「範囲の中から、上から n 番目に大きい値を返す」
関数です。
これを縦にコピーしたり、他関数と組み合わせることで、
「上位n件の値」や「上位n件の行情報」が取れるようになります。


LARGE の基本

LARGE の書式はとてもシンプルです。

=LARGE(範囲, n)

範囲:順位を付けたい数値の集合(点数、売上、金額など)
n:大きいほうから何番目か(1=最大、2=2番目に大きい…)

例えば、D2:D10 に点数が入っているとき、

=LARGE(D2:D10, 1)   ' 最大値
=LARGE(D2:D10, 2)   ' 2番目に大きい値
=LARGE(D2:D10, 3)   ' 3番目に大きい値

というように使います。


上位n件の「値」だけを抽出する

上位3件の点数を、F2:F4 に表示したいとします。
D2:D10 に点数が入っている前提です。

まず、F2 に次の式を書きます。

=LARGE(D2:D10, 1)

F3 に

=LARGE(D2:D10, 2)

F4 に

=LARGE(D2:D10, 3)

と書いてもいいですが、
n の部分だけを「行番号を使って自動化」するとよりスマートです。

F2 に次の式を書いて、下へコピーします。

=LARGE($D$2:$D$10, ROW(A1))

ROW(A1) は 1、ROW(A2) は 2、ROW(A3) は 3 …と増えていくので、
F2 =1位、F3 =2位、F4 =3位…という形で、
上位n件の点数が自動的に並びます。


上位n件の「名前」や「商品」をセットで抜き出す

実務で欲しいのは「点数そのもの」ではなく、
「点数の高い人の名前」「売上上位の商品の名前」などですよね。

ここで INDEX+MATCH+LARGE の組み合わせを使います。

前提:
A2:A10:名前
B2:B10:科目
C2:C10:点数

点数上位3名の「名前」を E2:E4 に表示したいとします。

1人目(1位)の名前を E2 に表示する式:

=INDEX(A$2:A$10,
       MATCH(LARGE($C$2:$C$10, 1), $C$2:$C$10, 0))

意味は、

  1. LARGE($C$2:$C$10, 1) で「点数の最大値」を求める
  2. MATCH(最大値, 点数範囲, 0) で「その点数が何行目か」を探す
  3. INDEX(名前列, その行番号) で「対応する名前」を返す

2位・3位も同じ要領で、LARGE の n だけ変えればOKです。

E3:

=INDEX(A$2:A$10,
       MATCH(LARGE($C$2:$C$10, 2), $C$2:$C$10, 0))

E4:

=INDEX(A$2:A$10,
       MATCH(LARGE($C$2:$C$10, 3), $C$2:$C$10, 0))

上位n件を「式を1つだけ書いて」下へコピーする

毎回 n を手書きするのは面倒なので、
ROW を使って「nを自動で増やす」のが定番テクニックです。

さきほどの「名前+点数」の例で、
E2 に 1つだけ式を書き、E4 までコピーしたい場合:

=INDEX($A$2:$A$10,
       MATCH(LARGE($C$2:$C$10, ROW(A1)), $C$2:$C$10, 0))

ROW(A1) が 1、行を1つ下げて ROW(A2) が 2、
さらに下に行くと 3…と増えていきます。

E2(ROW(A1)=1)→ 1位
E3(ROW(A2)=2)→ 2位
E4(ROW(A3)=3)→ 3位

というように、コピーするだけで上位n件が自動で並びます。


上位n件を「複数列まとめて」抽出したい場合

A2:D10 に
A列:商品コード
B列:商品名
C列:担当者
D列:売上

が入っていて、
売上上位3件の「行全体」を別表に出したい、というケースです。

やり方は少し高度になるので、ここでは「1件ずつ取る考え方」を押さえます。

1件目(売上1位の行)の「商品名」を E2 に表示:

=INDEX($B$2:$B$10,
       MATCH(LARGE($D$2:$D$10, 1), $D$2:$D$10, 0))

同じように、商品コード・担当者も
INDEX の第1引数(取りたい列)だけ変えれば取れます。

上位3件ぶんが欲しい場合は、
LARGE の n を ROW(A1), ROW(A2), ROW(A3) で動かしてあげる、
という形になります。


よくあるつまずきと注意点

LARGE は「数値」専用です。
空白や文字列が混ざっていると、意図しない動きになることがあります。

空白を除外したい場合は、
あらかじめ FILTER などで数値だけを抜き出してから LARGE に渡す方法もあります。

同じ値が複数ある場合、
LARGE は「同じ値」を何度でも返します(順位の重複)。
例えば点数が
90, 80, 80, 70
なら、

LARGE(範囲,1) = 90
LARGE(範囲,2) = 80
LARGE(範囲,3) = 80

となります。
「同点も上位として扱う」場合はそのままでOKですし、
「同点を1つとして扱いたい」場合は UNIQUE と組み合わせるなど工夫が必要になります。


例題

問題1

D2:D10 にテストの点数が入っています。
この中から「最大の点数(1位)」を E2 に表示する式を書いてください。

=LARGE(D2:D10, 1)

問題2

D2:D10 の中から「上位3件の点数」を E2:E4 に表示したいとします。
E2 に1つだけ式を書き、下にコピーして使えるようにしてください。

=LARGE($D$2:$D$10, ROW(A1))

問題3

A2:A10 に名前、C2:C10 に点数が入っています。
点数が最大の人の名前を E2 に表示する式を書いてください。

=INDEX(A2:A10,
       MATCH(LARGE(C2:C10, 1), C2:C10, 0))

問題4

A2:A10 に名前、C2:C10 に点数が入っています。
点数上位3人の名前を E2:E4 に表示したいとします。
E2 に1つだけ式を書き、下にコピーして使えるようにしてください。

=INDEX($A$2:$A$10,
       MATCH(LARGE($C$2:$C$10, ROW(A1)), $C$2:$C$10, 0))

問題5

A2:A10 に商品名、D2:D10 に売上が入っています。
売上が2番目に大きい商品の名前を F2 に表示する式を書いてください。

=INDEX(A2:A10,
       MATCH(LARGE(D2:D10, 2), D2:D10, 0))

まとめ

LARGE を使った「上位n件抽出」の基本は、次の2つです。

数値だけ欲しいときの型:

=LARGE(範囲, n)
=LARGE($範囲$, ROW(A1))   ' コピーで n を自動増加

上位n件の「名前・商品など」を取りたいときの型:

=INDEX(取りたい列,
       MATCH(LARGE(評価列, n), 評価列, 0))

=INDEX($取りたい列$,
       MATCH(LARGE($評価列$, ROW(A1)), $評価列$, 0))

この型さえ押さえておけば、
「売上上位n件」「点数上位n人」「スコアランキング」といった
“上位抽出”の仕事は、ほぼすべてこなせるようになります。

タイトルとURLをコピーしました