概要
「売上上位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))
意味は、
- LARGE($C$2:$C$10, 1) で「点数の最大値」を求める
- MATCH(最大値, 点数範囲, 0) で「その点数が何行目か」を探す
- 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人」「スコアランキング」といった
“上位抽出”の仕事は、ほぼすべてこなせるようになります。
