• ベストアンサー

Excel、規定試合数以上の勝率上位者を求める

囲碁仲間30人の成績表を作っています。 A列(A3~A32)対局数、B列(B3~B32)に勝率が入力されています。 C列(C3~C32)に、対局数100以上で且つ勝率上位の10人を数字1~10(非該当者の欄はブランク)で表示したい。 現在は、別の列に対局数順、勝率順を求め、それを利用して対局数100以上で且つ勝率上位の10人を求めていますが、あまりスマートでなく気に入りません。

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

  • ベストアンサー
  • comv
  • ベストアンサー率52% (322/612)
回答No.7

こんにちは 例えば以下のような感じでしょうか   A    B   C 1 試合数  勝数  順位 2 106    21   式 3  85    34   ↓ 4  98    23   ↓ 5 112    45   ↓ 6 119    65   ↓ 7 153    18   ↓ セルC2に 式 =IF(A2>=100,TEXT(SUMPRODUCT((A$2:A$7>=100)*(B$2:B$7>B2))+1,"[>10];[=0];0"),"") 下行へ複写・・・A$2:A$7 B$2:B$7 がデータ範囲とした 場合です 式中は必要範囲に読替えて入力して下さい

ubonoti01
質問者

お礼

ご教示のとおり行いましたが、うまくゆきませんでした。 (セルC2~C7すべて空白となりました) 式の入力(ペースト)およびオートフィルでエラーも出ませんでした。 関数SUMPRODUCTは経験なく理解不十分ではありますが・・・。

ubonoti01
質問者

補足

できました。先刻「できなかった」旨の補足をしましたが、再度ご回答とおりでできました。有り難うございました。

その他の回答 (6)

  • O_Denwa
  • ベストアンサー率26% (46/172)
回答No.6

関数じゃないですけど。 B列の文字揃えを右寄せにしといて、 対局数100に満たない人の、勝率を入力するさい、 「'」(シングルクォーテーション)を数字の前に入れて、 あとは、普通にIF関数とRANK関数で求めてみるとか。 スマートじゃない上に、今度は勝率順求めるのが面倒そうだけど(^^;

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

#1のものです。フィルタオプションを使った解答を載せます。 テストデータとしてA1からC8まで下記データを入れてください。 対局成績表 氏名 対局数 点数 a 3 24 b 7 34 c 10 23 d 8 45 e 6 65 f 4 77 A10からC10まで下記データを入れて下さい。 A11には=B10と入れてください。 対局数 >5 成績表 >5 操作に移ります。データ-フィルタ-フィルタオプションの設定をクリック。 フィルタオプションの設定のウインドウで、 指定した範囲をON リスト範囲$A$2:$C$8 検索条件範囲$A10:$A11 抽出範囲$A13:$C25(例えばです) OKをクリック D14に関数式=IF(RANK(C14,$C$14:$C$17)<3,RANK(C14,$C$14:$C$17),"") を入れる。最下行まで複写。結果は 氏名 対局数 点数 b 7 34 c 10 23 d 8 45 2 e 6 65 1

  • moccos
  • ベストアンサー率43% (61/140)
回答No.4

もう#2さんがかかれてますが・・ 初めまして。 関数一発!で出来るかもしれませんが当方理解不能なので、 こんなのどうでしょうか? ○D列に規定対局数以上の勝率を記入する。 (100以上になる事も考慮してC2セルに数値を入力する) D4セルに =IF(A4>$C$2,B4,"") と入力する。最終行までオートフィル。 ○C4セルに =IF(IF(D4="","",RANK(B4,$D$4:$D$33,FALSE))>10,"",IF(D4="","",RANK(B4,$D$4:$D$33,FALSE))) 同じく最終行までオートフィル。 でD列を「非表示」にすれば良いかと思います。 一寸ださいかな?

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

#1解答したものです。対局数が一定数以上の条件が入っていませんでした。済みません。引き続き考えて見ますが むつかしそうです。 (1)対局数の順序(降順)にならべてしまっても良ければ、対局数MAXから100までの行に上記の方法を適用すれば、結果だけは得られる事は得られますが。 (2)フィルタオプションで対局数100以上を同シートの別のセル範囲に抜き出すことは出来ますが、それは お気に召さないですか。 (3)「別の列に対局数順、勝率順を求め、それを利用して対局数100以上で且つ勝率上位の10人を求めていますが」 とありますが、別範囲にコピーして別セットの表を作り、あとは目で見てえらんでおられるのですか。目で見てやるときは勝率順の表出やらないとむつかしいのでは。

  • 2002pon
  • ベストアンサー率48% (42/87)
回答No.2

どうしても1列必要な気がします。 条件に満たない勝率(この場合100戦未満)を例えばゼロに置き換えたような列を 作ります。 例)=if(A4<100,0,B4) これを例えばC列に作ったら、そのC列に対して、#1さんのようにRANK関数を適用 すればいいかと。 =IF(RANK(C4,$C$3:$C$32,0)>10,"",RANK(B5,$C$3:$C$32,0)) こんな感じで。

ubonoti01
質問者

お礼

そうですか、やはり一気に求めるのは無理ですか。残念。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

RANK関数を使います。 テストデータとしてA1からB6まで下記データを入れてください。氏名と点数と考えてください。 a 21 b 34 c 23 d 45 e 65 f 18 C1セルに「==IF(RANK(B1,$B$1:$B$6)<4,RANK(B1,$B$1:$B$6),"")」(「」内の部分のみ)を入れて 下さい。強制改行されています。1行で入れてください。 $の付いているのは絶対参照で、必ずこのようにする必要があります。 B2からB6まで+フィルハンドルを引っ張って複写してください。すると a 21 b 34 3 c 23 d 45 2 e 65 1 f 18 となります。

ubonoti01
質問者

お礼

ご回答有り難うございます。が、わたしの質問を勘違いされているようです。 ご回答のテストデータ a 21 b 34 c 23 d 45 e 65 f 18 を、 106 21 85 34 98 23 112 45 119 65 153 18 として、 106 21 3 85 34 98 23 112 45 2 119 65 1 153 18 を求めたいんです。 (A列の値が100以上で、B列の値の上位3番目までの場合)