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

いつもお世話になっています。

今学校の文集作成をしています。
そこで「なんでもランキング」があるのですがこの得票数を今Excelで計算しています。

クラス40人なので
A2~A42まで出席番号
B2~B42まで名前
そして
C2~C42までが質問1に対するその人得票数
D2~D42までが質問2に対するその人の得票数・・・
というかたちで質問25まであります。
このときに、どこのセルでもいいので質問1の得票数TOP5、質問2の得票数TOP5・・・といった形で表示させていのですがどのようにしたらいいのでしょうか???

本当に私的なことでごめんなさい(><)

A 回答 (9件)

#6です。

ご要望について
#6の下記の部分を貼りつけ直してみてください。
'----結果を列にセット
For i = 1 To 40
Cells(i + 1, s) = n(i)
Cells(i + 1, s).Offset(0, 1) = d(i)
If i > 4 Then
If d(i) > d(i + 1) Then Exit For
End If
Next i
End Sub
テストの一例では
名前1692
名前3683
名前1782
名前382
名前674
名前1074
名前3474
名前1474
(1)上位人数5人入賞(#3)、
(2)点数上位5種入賞、
(3)上位5人但し5人目と同点全員入賞(本件)など考えられますね。
(2)は下記の部分を貼りつけして修正する。
'----結果を列にセット
shu = 0
For i = 1 To 40
Cells(i + 1, s) = n(i)
Cells(i + 1, s).Offset(0, 1) = d(i)
If d(i) <> d(i - 1) Then shu = shu + 1
If shu > 4 Then Exit For
Next i
End Sub
テスト例
名前1692
名前3683
名前1782
名前382
名前674
名前1074
名前3474
名前1474
名前3365
    • good
    • 0
この回答へのお礼

ありがとうございました!
無事思うような操作ができました☆
本当にありがとうございました!

お礼日時:2004/06/05 12:28

#3です。


#3に対する補足でなかったので、どうしようかと思ったのですが、一応回答します。
>#3に方の方法を試したところ
>=INDEX($B$2:$B$42,LARGE(($C$2:$C$42=BB2)*ROW($C$2:$C$42)
>,COUNTIF(BB$2:BB2,BB2))-1)
>で#VALUE!となってしまいました・・・。
単純に上記の関数を入力して、Enter押したのではないでしょうか?計算式の下に「Ctrl+Shift+Enterで配列数式にします。」と書いておきましたが、分かりにくいですか?
上記関数を入力したら、Enterを押すのではなくCtrl+Shift+Enterを押して下さい。
正しく入力されていれば、上記の式の両端が{}になります。
{=INDEX($B$2:$B$42,…中略…,BB2))-1)}
↑こんな感じです。       ↑

あと順位の付け方ですが、
>1位、2位、2位、3位、4位でお願いします!
#3では1から順にBA2から入力するようにしていますが、これは変えずに、表示用の順位をつける方がいいと思います。
列の順序が変ですが、仮にBDに表示用順位を出すようにします。
BD2には数字の1を入力します。
BD3には式で
=IF(BB2=BB3,BD2,BD2+1)
を入力します。下にコピーします。

列の順序が気に入らない場合、列を選択して「切り取り」、挿入したい列を選んで、「切り取ったセルの挿入」で計算式が変にならずに加工できると思いますので、試してみて下さい。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。!
質問1のランキングは無事作成できました!
これは質問2に移るとき「$C$2・・・」がが絶対参照になっているのでコピー&ペーストではできませんよね・・・?以下の作業を効率よくやる方法があればぜひお願いします!
なんどもすいません!

お礼日時:2004/06/05 11:01

得票が同数ある場合を想定していませんでした。



=RANK(LARGE(Sheet1!C:C,ROW()-1),Sheet1!C:C)&"-位"&INDEX(Sheet1!$A:$Z,MATCH(LARGE(Sheet1!C:C,ROW()-1),Sheet1!C:C,FALSE),2)&"-"&LARGE(Sheet1!C:C,ROW()-1)

「n位-名前-得票数」で表示。

尚、データの入力されているシート名がSheet1で無い場合は数式中のSheet1の部分を実際のシート名に変えてください。
    • good
    • 0
この回答へのお礼

詳しくありがとうございました。
すると一位などはしっかりと表示されるのですが、
同数順位のとき名前がうまく出ず、名前の部分が「-」となってしまったり、同じ人の名前が表示されるようになってしまいました(><)

お礼日時:2004/06/05 10:29

関数で希望と言うことで、題意に合わないですが、VBAでの解を参考までに。

変え方を知ると、色々なケースで使えると思います。
ツール-マクロ-VBE-挿入-標準モジュールででた
画面に、下記をコピーして、貼りつけ。その後にメニューの「実行」。
Sub test01()
Dim d(100), n(100)
'----列指定
c = InputBox("対象列=")
s = InputBox("結果列=")
'----データを配列にセット
For i = 1 To 40 '40人分
d(i) = Cells(i + 1, c) 'データ列から
n(i) = Cells(i + 1, "B") '名前列から
Next i
'-----データ列で降順並べ替え
For i = 1 To 40
 For j = i + 1 To 40
  If d(i) < d(j) Then
   w1 = d(i): w2 = n(i)
   d(i) = d(j): n(i) = n(j)
   d(j) = w1: n(j) = w2
  End If
 Next j
Next i
'----結果を指定列にセット
For i = 1 To 5 '5人に限り
Cells(i + 1, s) = n(i)
Cells(i + 1, s).Offset(0, 1) = d(i)
Next i
End Sub
40人が変った場合(100人まで)
結果を出す5人が変った場合
生徒データスタート行が変った場合
どこを変えるべきか判りますか。
    • good
    • 0
この回答へのお礼

ありがとうございます!あと少しでうまくいきそうです!
このとき1位が1人、2位が3人、3位が5人のとき自動的に3位の人が一人しか入りませんが、これを3位全員表示することはできるのでしょうか?

お礼日時:2004/06/05 10:18

Sheet2 に結果を抽出します。



1.Sheet2の一行目に質問1~質問25のタイトル作成

2.A2セルに
  =INDEX(Sheet1!$A:$Z,MATCH(LARGE(Sheet1!C:C,ROW()-1),Sheet1!C:C,FALSE),2)&"-"&LARGE(Sheet3!C:C,ROW()-1)

3.A2を下方へ順位の必要分フィルダウン(下方へコピー&ペースト)
  eg.5位までならA6,6位-A7,8位-A9....

4.A2~フィルダウンしたセルをフィルライト(右方へコピー&ペースト)

各セルに「名前-得票数」という形で表示します。
    • good
    • 0

☆TOP5の表示の仕方



5人の名前を5つのセルを使って表示するのでしょうか?
それとも多いほうから5個の数字を表示するのでしょうか?
それとも得票数の数字の右のセルに「第何位」と表示するのでしょうか?
それとも上位5位まで数字の色やセルの色を変えて目立たせるのでしょうか?


☆同順位の処理

同じ得票数があった場合、どのように表示させたいでしょうか?
1位、2位、2位、4位、5位?
1位、2位、2位、3位、4位?
1位、2位、2位、3位、4位、5位?

補足をお願いいたします

この回答への補足

親切にありがとうございます!
1位、2位、2位、3位、4位でお願いします!
あと名前と得票数が表示されるようにしたいです。
#3に方の方法を試したところ
=INDEX($B$2:$B$42,LARGE(($C$2:$C$42=BB2)*ROW($C$2:$C$42),COUNTIF(BB$2:BB2,BB2))-1)
で#VALUE!となってしまいました・・・。
なぜでしょう・・・???

補足日時:2004/06/05 02:05
    • good
    • 0

得票数Top5で出したい結果は、得票数が何票だったかだけでいいのでしょうか?


それとも、名前で出すのでしょうか?

得票数だけなら、すでに回答のあるLARGE関数を使えばいいですが、名前を出すのでしたら、得票数で同数が存在する時の処理がちょっとややこしくなります。

まず離れたセルということでBA列で作業することとします。
BA1に順位、BB2に得票数、BC3に名前と入力します。
BA2から下に1,2,3,4,5,6,7と入力していきます。(同数5位が考えられるため、若干余裕を持たせます。適当に決めて下さい。)
BB2セルに
=LARGE($C$2:$C$42,BA2)
と入力し下にコピーします。
BC2セルに
=INDEX($B$2:$B$42,LARGE(($C$2:$C$42=BB2)*ROW($C$2:$C$42)
,COUNTIF(BB$2:BB2,BB2))-1)
でCtrl+Shift+Enterで配列数式にします。下にコピーします。
同数の場合、出席番号が大きい人から上に表示されるようになります。

同数が存在しないなら、BC2セルは
=INDEX($B$2:$B$42,MATCH($BB2,$C$2:$C$42,0))
でOKです。
    • good
    • 0

たとえば、質問の下43行目から


質問1のTOP1は、=LARGE($C$2:$C$31,1)
TOP2は、=LARGE($C$2:$C$31,2)
TOP3は、=LARGE($C$2:$C$31,3)
TOP4は、=LARGE($C$2:$C$31,4)
TOP5は、=LARGE($C$2:$C$31,5)
というように入力します。
    • good
    • 0

RANK関数を使用すればできそうです。


例題のURLを参照してください。

参考URL:http://www2.odn.ne.jp/excel/waza/function.html#S …
    • good
    • 0
この回答へのお礼

数値が一番大きい人の名前の表示は可能でしょうか?

お礼日時:2004/06/05 02:01

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