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

こんにちは、
エクセルで添付のようなA1~G9の表から順位表を作りたいと思っています。
(目的はA13からC15を作りたい)
(本当はもっと沢山の人がいますがとりあえずサンプルは3人です)


最初C列をRANK関数を使ってみたのですが、C,E,G列など飛び飛びの列ではうまくいきませんでした
^^;
何か効率的に関数などをつかって作る方法はありますでしょうか?
もし解る方がいましたらよろしくお願いします

「Excelで順位表を作りたい」の質問画像

質問者からの補足コメント

  • どう思う?

    ご連絡ありがとうございます
    とても素晴らしい回答をありがとうございます。
    こんな迅速に的確な回答をいただき感謝します。(^^
    この表ではばっちりなのですが、1つ問題がありまして・・

    実は実際の表ではB9,E9,G9に合計の回数の合計が入ります。
    例えばB9が12 E9とG9に10の合計回数が入ったとすると
    それでも計算は可能でしょうか?この表では可能かもしれませんが
    あくまで一例で極端に言うとE9に1000とか入る場合なども含め
    点のC9,E9,G9だけの数字の順位を求めたいと言う感じなのですが・・・

    やはり合計回数の行は分けるしかありませんでしょうか?
    もしわかりましたらご指導お願いできたらとても嬉しいです。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/09/25 01:46

A 回答 (3件)

1.式 =RANK.EQ(C9,$C$9:$G$9) を入力したセル B10 を右4列オート


 ̄ ̄フィル
 ̄ ̄此れが目障りなら、該当範囲のフォント色を白にすれば好い。
2.G/標準"位"
 ̄ ̄に書式設定した範囲 A13:A15 に上から数値 1、2、3 を入力
3.次の各セルにその右側の式をそれぞれ入力して、範囲 B13:C13 を下方
 ̄ ̄にオートフィル
 ̄ ̄ B13: =INDEX(B$1:F$1,MATCH(A13,B$10:F$10,0))
 ̄ ̄ C13: =INDEX(C$9:G$9,MATCH(A13,B$10:F$10,0))
「Excelで順位表を作りたい」の回答画像1
この回答への補足あり
    • good
    • 0

》 実は実際の表ではB9,E9,G9に合計の回数の合計が入ります


後出しジャンケンは狡いです。(^_^)
添付図のような対策を採ったけど如何でしょうか?

添付図では次の変更をしています。
11.式 =IF(C$2="点",C9,"") を入力したセル C11 を右4列にオートフィル
12.セル B10 の式 =RANK.EQ(C9,$C$9:$G$9) を =RANK.EQ(C9,$C$11:$G$11)
 ̄ ̄に変更して、そのセルを右4列に再オートフィル

再度の「実は…」はご勘弁を。
「Excelで順位表を作りたい」の回答画像2
    • good
    • 0
この回答へのお礼

ご丁寧に教えて頂きありがとうございました。
追加質問までしてしまいすみませんでした。
おかげで解决できました
本当にありがとうございました。(*^_^*)

お礼日時:2017/09/28 20:38

こんにちは



>合計の回数の合計が入ります
「合計の回数の合計」の意味するところが分かりませんが、要は「点数の合計欄は無いよ」ということでしょうか?

通常の関数で求めるのには、合計が算出されていないと難しいように思います。
シート上で使用しない行(例えば200行目とか)を作業用の行として、合計を出しておき非表示行に設定しておくなどすれば、既回答の内容をそのまま応用できると思います。
(合計値さえだせれば、非表示の別シートでもなんでもよいのですが)


どうしても点数の合計欄等を設けずに直接結果を求めたいのなら、ユーザ定義関数等を利用すれば可能でしょう。
また、ご例示の表では同点者がいないので、順位がすんなり決まりますが、同点者がいる場合はどのように処理するのでしょうね?

以下は、ユーザ定義関数を利用した、とりあえずのサンプルです。
同点者がいる場合は、カンマ区切りで氏名が表示されます。
使用方法は、結果を表示したいセルに
 =rank2(順位、点数表の範囲 [, 表示内容])
順位は1~の順位、表の範囲は氏名欄を含む範囲です。
表示内容は"name"又は指定なしで、"name"を指定すると氏名が、なしの場合は点数の合計が返されます。("name"以外を指定しても、指定なしと同じになります)

サンプルの添付図では、
 B13に =rank2(A13,$B$1:$I$8,"name")
 C13に =rank2(A13,$B$1:$I$8)
の関数式を入力して、下方にフィルコピーしています。
利用しているユーザ定義関数は以下です。

Function rank2(ByRef o As String, ByRef r As Range, ParamArray p())
Dim n As Long, i As Long, v As Double
Dim total() As Double, f As Boolean

n = Int(r.Columns.Count / 2)
ReDim total(1 To n)
If UBound(p) >= 0 Then f = p(0) = "name" Else f = False

For i = 1 To n
 total(i) = WorksheetFunction.Sum(r.Columns(i * 2))
Next i

rank2 = ""
If Val(o) > 0 And Val(o) <= n Then
 v = WorksheetFunction.Large(total, Val(o))
 If f Then
  For i = 1 To n
   If v = total(i) Then rank2 = rank2 & ", " & r.Cells(1, i * 2 - 1).Value
  Next i
  rank2 = Mid(rank2, 3)
 Else
  rank2 = v
 End If
End If

End Function
「Excelで順位表を作りたい」の回答画像3
    • good
    • 0
この回答へのお礼

とても細かく説明していただきましてありがとうございました。
たすかりました。
感謝の気持ちで一杯です。(●^o^●)

お礼日時:2017/09/28 20:38

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