• ベストアンサー

EXCELの表で上位3(TOP3)を表示

説明がわかりにくいかもしれませんが、 EXCEL2000で例えば10社分のデータのを毎日入力し、その合計の値の TOP3を関数で表示(抽出?)させることはできるのでしょうか? (毎日入力しているので、A~Jの合計値は変動します。 毎日のデータは別シートで入力) 合 計 A社:25 B社:19 C社:55  : I社:37 J社:80 ★TOP3★  A列 B列 (1)J社:80 (2)E社:78 (3)C社:55 セルのA列に社名、B列に数値を返すようにでしたいのですが…。 関数のRANKだと合計の横に順位が出るだけ?のようなので、 指定したセルの範囲に上位3社の社名と数値が表示されるように できる方法をご存知の方、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • hinebot
  • ベストアンサー率37% (1123/2963)
回答No.2

多分、#1の方の式そのままではエラーになるような…。(カッコの数がおかしい。sheet名の指定も変だと) RANKを使った方法です。 各合計が、E・F列にあるとします。(E列が会社名、F列が数値) となりのG列を作業列とします。セルG1に =RANK(F1,F:F,0) として10行目までコピーし、とりあえず順位を表示させます。 この上でセルA1に =INDEX(E:E,MATCH(1,G:G,0)) また、B1に =INDEX(F:F,MATCH(1,G:G,0)) とすればOKです。 MATCHの直後の"1"が順位ですので、これを2と3に変えて セルA2~B3にコピーすればTOP3の完成です。 考え方自体は#1の方と同じですけど。

mumu20
質問者

お礼

回答ありがとうございました。 早速やってみたら、できました。 INDEX、その他関数はあまりよくわからないので、 書いていただいた通りにやってみたらできました。 ためしに数値を変えてみても、変動していたので感動です。 ありがとうございました。

その他の回答 (2)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

こんにちは。maruru01です。 数値が同じ場合は、行の上のデータを優先します。 また、数値は整数限定とします。 元の表がSheet1のA1:B10にあるとします。 別シートのA1に、 =INDEX(Sheet1!$A:$A,1/MOD(LARGE(Sheet1!$B$1:$B$10+1/(ROW(Sheet1!$B$1:$B$10)+1),ROW(A1)),1)-1) と入力して、[Ctrl]+[Shift]+[Enter]で確定します。 (数式の両端に「{}」が付いて、配列数式になります。) B1に、 =INT(LARGE(Sheet1!$B$1:$B$10+1/(ROW(Sheet1!$B$1:$B$10)+1),ROW(A1))) と入力して、同様に[Ctrl]+[Shift]+[Enter]で確定します。 そうしたら、A1:B1を3行目までコピーします。

mumu20
質問者

お礼

回答ありがとうございました。 最初に#2の方の方法でやってみたらできました。 これからも何かありましたら、またよろしくお願いします。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

各合計がSheet1のA1:B10にあるとして C1に =B1+ROW(A1)/100 としてC10までコピーしてください。 これは同数値がある場合の対応です。 TOP3のA1:A3に1,2,3と入力 B1に =INDEX(SHEET1$A$1:$A$10,MATCH(LARGE(SHEET($C$1:$C$10,A1),$C$2:$C$6,0),1) C1に =INDEX(SHEET1$B$1:$B$10,MATCH(LARGE(SHEET($C$1:$C$10,A1),$C$2:$C$6,0),1) として3行目までコピー これでできます。 関数を使わないでピボットテーブルを使う方法があります。 こちらの場合はTOP3の件数が4件以上になる場合の表示も可能です。

mumu20
質問者

お礼

早速の回答ありがとうございました。 #2の方の方法でやってみたらできました。 これからも何かありましたら、またよろしくお願いします。

関連するQ&A