• ベストアンサー

関数の組み方を教えてください

検索してもなかなかみつからなかったので教えてください。 1チーム6~8人でそれが5チームあります。 それぞれのチームの中で得点上位者を3人ずつをぬき出し、その3人の得点の合計が多いチームから順位づけしたいと思っています。 アクセスが不慣れなためできればエクセルの関数でやりたいのですが、どうネストさせていけばいいかよくわかりません。 ぜひとも宜しくお願いします。

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

  • ベストアンサー
  • suz83238
  • ベストアンサー率30% (197/656)
回答No.2

>得点上位者を3人ずつをぬき出し、その3人の得点の合計 これは、B1~B8まで得点があったとして =LARGE(B1:B8,1)+LARGE(B1:B8,2)+LARGE(B1:B8,3) で求める。これをそれぞれチーム全部で求めておく。 そして 121 Aチーム 222 Bチーム 以下略 を作っておいて =VLOOKUP(LARGE(A11:A18,1),A11:B18,2,0) で一番のチーム名が出る。

xyz123hanri
質問者

お礼

なるほどー。助かりました。ほんとにありがとうございました。

その他の回答 (2)

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

配列数式、SUMPRODUCTなどやってみたが、うまくいかない ーー VBAなら素直なロジックで出来る。 例データ グループ 計数 g1 12 g2 23 g1 21 g3 14 g3 31 g1 21 g2 14 g1 22 g4 10 g1 20 g4 18 g3 16 g3 13 g4 22 g2 11 g2 19 g3 17 g4 14 g2 14 g4 24 A列昇順+B列降順でソート VBAでも簡単に出来るが省略。マクロの記録をとっても判る。 E列  F列 グループ 計数 g1 22 g1 21 g1 21 g1 20 g1 12 g2 23 g2 19 g2 14 g2 14 g2 11 g3 31 g3 17 g3 16 g3 14 g3 13 g4 24 g4 22 g4 18 g4 14 g4 10 ーーー 標準モジュールに Sub test01() d = Range("E65536").End(xlUp).Row '最下行補足 'MsgBox d k = 2 '書き出しは2行目から。M,N列におこなう m = Cells(2, "E") '前行のキー=グループ名 t = Cells(2, "F") r = 1 '各グループ内での現在行の順位数 '-- For i = 3 To d 'データ第2行から開始 s = Cells(i, "E") 'キー項目=グループ名 If s = m Then 'グループ名について前行と同じなら r = r + 1 '順位数を1上げる If r < 4 Then '3位までは足しこむ t = t + Cells(i, "F") '計数を足しこみ Else End If Else '--結果書き出し M,N列 Cells(k, "M") = m '1行前のグループ名 Cells(k, "N") = t / 3 'Top3人平均 k = k + 1 '次の書き出し1行下への準備 '--グループ変更で切り替え r = 1 t = Cells(i, "F") m = s End If Next i '後じまい Cells(k, "M") = m Cells(k, "N") = t / 3 'Top3人平均 End Sub ーーー 結果 M列  N列 g1 21.33333333 g2 18.66666667 g3 21.33333333 g4 21.33333333 === >チームから順位づけしたいと思っています N列でソート。

xyz123hanri
質問者

お礼

お礼が遅くなり申し訳ございませんでした。 マクロ勉強してみます。 詳しい説明ありがとうございました。

  • jo-zen
  • ベストアンサー率42% (848/1995)
回答No.1

LARGE(数値,範囲,順位)関数を使って1番目、2番目、3番目の得点を取り出し合計してそれを使ってVLOOKUP関数などでチーム名を取り出してあげればよいかと思います。 なお、LARGE関数で順位を1,2,3としたとき同点者がいても、例えば1→10、2→10、3→9のように取り出されます。

xyz123hanri
質問者

お礼

ありがとうございました。 わかりやすかったです。

関連するQ&A