プロが教えるわが家の防犯対策術!

いつもお世話になっております。
 上位3名の合計点を求める時に、同順位(例:1位1名・2位1名・3位2名)が出た場合、3位者(同順位者)については1名のみの点数を計算したいのですがその方法がわかりません。よろしくお願いします。
 また、2位が2名の時は、1位と2位の3名の合計点の計算となります。

 順位はRANK関数を使用しています。

得点 順位 上位合計点
98  1
80  3
76        ?
82  2
80  3

よろしくお願いします。

A 回答 (5件)

A列  B列  C列


98 =rank(a1,$a$1:$a$5,false) =sum($a$1:$a$3)
80 =rank(a2,$a$1:$a$5,false)
76 =略
82 =略
80 =略

として、順位計算をさせた後、a1~b5セルを選択してB列で昇順にソートをかければ順位番号如何に関わらず上位3名の合計点を計算できます。
    • good
    • 0
この回答へのお礼

いろいろな方法があり、勉強になりました。ありがとうございました。

お礼日時:2004/07/02 12:30

順位の計算は


=RANK($A1,$A$1:$A$5)+ROW()/100
(最後の100は人数に合わせて調整してください。)
上記の例だと
得点 順位 上位合計点
98  1.01
80  3.02
76  5.03
82  2.04
80  3.05
になります。
上位合計点は
=SUMPRODUCT((RANK(B1:B5,B$1:B$5)>=3)*(A1:A5))
順位は表示形式で小数点以下桁数が0にしてください。
    • good
    • 0
この回答へのお礼

いろいろな方法があり、勉強になりました。ありがとうございました。

お礼日時:2004/07/02 12:30

=LARGE(得点範囲,1)+LARGE(得点範囲,2)+LARGE(得点範囲,3)



で、常に上位三つの点数の和になります。
    • good
    • 0
この回答へのお礼

いろいろな方法があり、勉強になりました。ありがとうございました。一番簡単な方法のようです。

お礼日時:2004/07/02 12:31

ユーザー関数を作るとすれば


VBEの標準モジュール画面に下記を貼りつけると良い。
Function rankx(a, x)
Dim cl As Range
Dim b(1000)
n = 0
For Each cl In a
n = n + 1
b(n) = cl
Next
'----
For i = 1 To n
For j = i + 1 To n
If b(i) > b(j) Then
Else
w = b(i)
b(i) = b(j)
b(j) = w
End If
Next j

Next i
'----
t = 0
For i = 1 To x
t = t + b(i)
Next i
rankx = t
End Function
骨子はソートをしただけのもの。
データ数1000以下であること。以上の時はDim b(1000)
を増やすこと。
下位から数える時は、上記ソートの部分のコードを昇順向きに組替えないといけない。
シートで結果を出したいセルに
=rankx(A1:A10,4)のように関数を入力する。
A1:A10はデータの入っているセル範囲、4は上位
4個を取る(4,5位同一データであればどちらが取られるかは偶然)ことを意味する。
    • good
    • 0
この回答へのお礼

いろいろな方法があり、勉強になりました。ありがとうございました。

お礼日時:2004/07/02 12:32

同順がでる場合は、重み付けをして同順がでないようにします。


(1)仮に一行目から、A列:No.、B列:得点、C列:重み付け得点(作業用)、D列:順位とします。(データ数は仮に10とし、No.は10まで記入)
(2)C2に=B2+0.5*A2/(MAX($A$2:$A$11))を入力して、11行までコピー
(3)D2に=RANK(C2,$C$2:$C$11)として、11行までコピー
(3)上位三位まで合計したいセルを=SUMIF(D2:D11,"<=3",B2:B11)
とします。
    • good
    • 0
この回答へのお礼

いろいろな方法があり、勉強になりました。ありがとうございました。

お礼日時:2004/07/02 12:32

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