3/26/2017

Excel。表からTOP3のデータを抽出したいけどどうしたらいいの?

Excel。表からTOP3のデータを抽出したいけどどうしたらいいの?

<INDEX&MATCH&LARGE関数>


TOP3の値なんて、
LARGE関数を使えば簡単に算出できるでしょう?と思われるでしょうが、
今回は、次の表からTOP3のデータを抽出したいというのがリクエストなのです。

左側のA2:C12までの表があります。
このデータの中から、E:Gにある、
別表にTOP3までのデータを抽出したいということなのです。

オートフィルターを使ってもいいのですが、
今回は、関数を使って抽出を行ってみたいと思います。

【LARGE関数だけでは難しい】

まず、1位だけならば、MAX関数を使うところですが、
2位・3位はMAX関数ではダメなので、登場するのがLARGE関数ですね。

しかし、このLARGE関数では、売上高のTOP3を算出することが出来ても、
店舗名を抽出することは出来ません。

仮に、LARGE関数で算出した数値を使ってVLOOKUP関数で
店舗名を算出しようとしても、売上高の左側なので、それも無理ですし、
数値が重複していた場合も考慮する必要がありますので、
LARGE関数単独では難しいようです。

そこで、このようなケースでは、INDEX関数が重宝します。

【INDEX関数とMATCH関数のコンビネーション】

INDEX関数は、
どこにデータがあるのかを教えてあげればいい関数なので、
それぞれ、1位・2位・3位の数値がデータの何件目にあるのかを教えてあげれば
データを抽出することが出来ます。

では、どのようにしたら、1位~3位までのデータがそれぞれ、
どこにあるのかを求めるには、MATCH関数を使えば求めることが出来ます。

そこで、今回は、まずはMATCH関数を使って別の列にデータを算出して、
それからINDEX関数を使っていく方法をとります。

E3をクリックして、MATCH関数ダイアログボックスを表示します。

検索値には、LARGE関数をネストしますので、
LARGE関数ダイアログボックスを表示します。

配列には、$C$3:$C$12
順位には、1という数値がある、F3
そして、数式バーを使って、MATCH関数ダイアログボックスに戻りましょう。

検索範囲には、売上高の$C$3:$C$12
照合の種類は、完全一致なので、0
そして、OKボタンをクリックします。

7と算出されました。この表の7件目のデータが1位ということがわかりました。

確かに、秋葉原の480が1位ですね。

では、E5まで数式をコピーしておきましょう。

では、この数値を使って、G3に店舗名を抽出していきます。

そこでINDEX関数を使いますので、
INDEX関数ダイアログボックスを表示します。

INDEX関数は、2種類の引数を持っている関数なのですが、
今回は、『配列・行番号・列番号』を使っていきますので、
選択してOKボタンをクリックします。

配列には、B$3:B$12 複合参照にしてあるのは、
完成した数式をオートフィルでコピーするためです。
行番号は、$E3
列番号は、0
あとは、OKボタンをクリックします。
そして、数式をオートフィルを使ってコピーします。

G3の数式は、
=INDEX(B$3:B$12,$E3,0)

これで、抽出することが出来ましたね。

このように、
INDEX&MATCH&LARGE関数のコンビネーションで抽出することが出来ましたね。

ついでに、数式を一発で算出しようとした場合は、
G3の数式は次のようになります。
=INDEX(B$3:B$12,MATCH(LARGE($C$3:$C$12,$F3),$C$3:$C$12,0),0)

やっぱり結構長い感じになりましたので、
慣れるまでは無理をせずに、
しっかり算出・抽出することを考えていきましょう。