4年に一度のスポーツの祭典 全競技速報中

項目別で上位〇位までのデータを抽出させたいのですが、方法がわかりません。。。

単純に項目関係なく、トップテンを表示させるのはオートフィルターでできるのですが、項目別に(各グループごとに)トップテンを表示する方法が思いつかなくて。。。

誰か心優しい方、教えて下さると幸いです。

gooドクター

A 回答 (2件)

作業列を使ってもよいなら、総合順位や項目別順位の列を設けて、それぞれ順位を計算してしまうのが近道かもしれません。


添付画像をご覧ください。
店舗別の売上一覧表ですが、グループがあってA、B、Cの3グループ別れています。これがご質問者のいう「項目」だと思ってください。
つまり、項目別順位ということはこの表ではグループ別順位といことになります。
添付画像①は全データの一覧です。総合順位を算出するため、D2に、

=RANK.EQ(C2,$C$2:$C$39,0)

を記述し、下方向へコピーしてあります。
さらに、グループ(別)順位を算出するため、E2に、

=SUMPRODUCT(($B$2:$B$39=B2)*($C$2:$C$39>C2))+1

を記述し、下方向へコピーしてあります。
この手続の後、A列~E列にオートフィルターを設置し、グループ(別)順位であるE列の▼をクリックして、数値フィルターで「5」以下を指定したうえで昇順に並べ、さらにグループ区分であるB列で昇順にしたものが添付画像➁です。
つまり、添付画像➁はグループ(別)順位【いいえれば項目別順位】で「トップ5」を表示していることになります。

グループ(別)順位を算出するためのE2に記述した数式は以下のように解釈できます。
=SUMPRODUCT((項目列=同行の項目セル)*(順位付け対象数値列>セルの数値))+1
グループ(項目)が複数あって、その項目を変えて順位を付けなおす場合は、数式の前段の「項目列と項目セル」の部分を別の項目に変更すればよいことになります。
また、グループ(項目)が階層的なものになっている(大グループの下に中グループがあり、その下に小グループがあるetc.)などの場合は、
=SUMPRODUCT((項目1の列=同行の項目1セル)*(項目2の列=同行の項目2セル)*(項目3の列=同行の項目3セル)*(順位付け対象数値列>セルの数値))+1
というように、前段の「項目列と項目セル」を重複して記述すればよいことになります。
「項目別でトップテンを表示させたいです。」の回答画像2
    • good
    • 1

こんにちは



どのようなデータから、何をしたいのかさっぱりわかりませんけれど・・・

仮に、縦軸にな名前などが、横軸に各項目(科目など)がある表で
各人の、項目別順位(=ランク)が表内に記入されているとします。
この表を基に「項目別の名前の順位表」を作成したいものと仮定するなら…

1)元データと同じ形式で横軸に各項目を作成した表を別に作成します。
2)項目ごとに、1,2,3・・・位を検索して、該当する氏名を表記すればよいです。
 具体的には、MATCH関数で順位の位置を検索し、その値を利用してINDEX関数で指名を参照すればよいです。(XLOOKUP関数が使える環境なら、直接参照可能です)
3)フィルコピーできる形で関数式を作成し、全体にフィルコピーすれば良いでしょう。

※ 検索方法や参照方法は、XLOOKUPあるいはMAT CHIBDEXあたりをキーに検索すれば、解説サイトがいろいろ見つかると思います。

※ 勝手な妄想での回答なので、意味が違っている場合はスルーしてください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング