- ベストアンサー
よろしくお願いします。RANK関数
一定の人だけの順位を低い順に出したいと思っています A列に名前 B列に点数 C列に順位のする、しない D列に順位 Aさん 80点 ● 5 Bさん 80点 ● 4 Cさん 100点 Dさん 50点 ● 2 Eさん 40点 Fさん 20点 ● 1 Gさん 60点 ● 3 : : のようにしたいと思っています。 同じあたいも違う数字で出したいと思っているのですが よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
No.3のmaruru01です。 >●の数とD列の数が1つ少なくなってしまいます。 ひょっとして、1行目は「名前」「点数」などの項目が入力されているのでは? それなら、ちゃんと数式を2行目用に変更しないとダメですよ。 =IF(LEN(C2),SUMPRODUCT(($C$2:$C$8="●")*($B$2:$B$8<B2))+SUMPRODUCT(($C2:$C$8="●")*($B2:$B$8=B2)),"") このような質問に対する回答に対しては、自分の実際のデータに従って範囲変更(確認)するのは、必須です。 最初にそこを疑うようにして下さい。 それが出来ないなら、セルの位置も正確に提示するようにしましょう。
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17070)
さすがに既に2件も回答がありますが、関数では複雑になると思って、VBAでユーザー関数作成でやって見ました。 (1)C列が●の人は対象から外す(#1さんの疑問) (2)B列の文字「点」が都合悪いので、数値点数に変えさせて頂きました。表示形式で点を出します(下記) (3)同点行は順位数は別々に変えるが、前後の根拠はない。(#1さんの質問) の3点を許してもらって、やりました。 ツール-マクロ-VBEでVBEの画面になります その画面のメニューで挿入-標準モジュールの画面を出して、下記を貼りつけます。 Function rankx(a, x) Dim cl As Range Dim b(1000), c(1000) n = 0 For Each cl In a If cl.Offset(0, 1) = "" Then Else n = n + 1 b(n) = cl c(n) = cl.Row End If 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 '--- w = c(i) c(i) = c(j) c(j) = w End If Next j Next i '---- For i = 1 To n If c(i) = x.Row Then rankx = i End If Next i End Function (利用)ワークシートに戻って、 E1セルに=rankx($B$1:$B$7,B1)といれ、E7まで複写する。 1000行以上なら、VBAコードの1000を5000とかに変えること。点数は1列だけに入っているものとする。 (結果) Aさん 80 ● 5 5 Bさん 80 ● 4 4 Cさん 100 0 Dさん 50 ● 2 2 Eさん 40 0 Fさん 20 ● 1 1 Gさん 60 ● 3 3 B列の書式をユーザー設定で#"点"などにすれば 80点 80点 100点 ・・・に、見た目はなります。
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 同じ点数の場合に、行が上の方が順位が小さくなるパターンは、D1に、 =IF(LEN(C1),SUMPRODUCT(($C$1:$C$7="●")*($B$1:$B$7<B1))+SUMPRODUCT(($C$1:$C1="●")*($B$1:$B1=B1)),"") と入力して、下の行へコピーします。 行が下の方が順位が小さくなるパターン(質問欄の例)は、D1に、 =IF(LEN(C1),SUMPRODUCT(($C$1:$C$7="●")*($B$1:$B$7<B1))+SUMPRODUCT(($C1:$C$7="●")*($B1:$B$7=B1)),"") と入力して、下の行へコピーします。 なお、範囲は適宜変更して下さい。 また、絶対参照($付き)と相対参照($なし)は、重要ですので、注意して下さい。
補足
早速の返信助かります。 やってみましたが・・ ●の数とD列の数が1つ少なくなってしまいます。 コピーしてみたのですが・・ うまい事行きません。 どうにかうまいこと行く方法ありますか? よろしくお願いします。
- mshr1962
- ベストアンサー率39% (7417/18945)
D列にランク用の数字設定でいいなら D1=IF(C1="●",B1+ROW()/100,101) E1=IF(C1="●",RANK(D1,$D$1:$D$100,1),"") 上記で同じ点数なら行が上の方が順位が小さくなります。 D列は幅を0にするか非表示にしてください。 人数が100人以上なら ROW()/1000の様に割る値を変更してください。
- snoopy64
- ベストアンサー率42% (337/793)
C列は、「●が順位付け対象者で、空白は対象外」でいいですか? 点数が同じ人の順位の差別化は何を基準にしますか? 後の回答者のために、補足お願いします。
補足
早速返信助かります。 空白は、対象外で点数の同じ人は並んでる順番と思っています。
補足
大変申し訳ありませんでした。。 初歩的なミス。文字でエラーが・・ なんとか出来上がり、大変満足しております。 このたびはありがとうございました。