- ベストアンサー
Excelの関数について
いつもお世話になっています。 今学校の文集作成をしています。 そこで「なんでもランキング」があるのですがこの得票数を今Excelで計算しています。 クラス40人なので A2~A42まで出席番号 B2~B42まで名前 そして C2~C42までが質問1に対するその人得票数 D2~D42までが質問2に対するその人の得票数・・・ というかたちで質問25まであります。 このときに、どこのセルでもいいので質問1の得票数TOP5、質問2の得票数TOP5・・・といった形で表示させていのですがどのようにしたらいいのでしょうか??? 本当に私的なことでごめんなさい(><)
- みんなの回答 (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 テストの一例では 名前16 92 名前36 83 名前17 82 名前3 82 名前6 74 名前10 74 名前34 74 名前14 74 (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 テスト例 名前16 92 名前36 83 名前17 82 名前3 82 名前6 74 名前10 74 名前34 74 名前14 74 名前33 65
その他の回答 (8)
#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) を入力します。下にコピーします。 列の順序が気に入らない場合、列を選択して「切り取り」、挿入したい列を選んで、「切り取ったセルの挿入」で計算式が変にならずに加工できると思いますので、試してみて下さい。
お礼
回答ありがとうございます。! 質問1のランキングは無事作成できました! これは質問2に移るとき「$C$2・・・」がが絶対参照になっているのでコピー&ペーストではできませんよね・・・?以下の作業を効率よくやる方法があればぜひお願いします! なんどもすいません!
- jindon
- ベストアンサー率43% (50/116)
得票が同数ある場合を想定していませんでした。 =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の部分を実際のシート名に変えてください。
お礼
詳しくありがとうございました。 すると一位などはしっかりと表示されるのですが、 同数順位のとき名前がうまく出ず、名前の部分が「-」となってしまったり、同じ人の名前が表示されるようになってしまいました(><)
- imogasi
- ベストアンサー率27% (4737/17069)
関数で希望と言うことで、題意に合わないですが、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人が変った場合 生徒データスタート行が変った場合 どこを変えるべきか判りますか。
お礼
ありがとうございます!あと少しでうまくいきそうです! このとき1位が1人、2位が3人、3位が5人のとき自動的に3位の人が一人しか入りませんが、これを3位全員表示することはできるのでしょうか?
- jindon
- ベストアンサー率43% (50/116)
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~フィルダウンしたセルをフィルライト(右方へコピー&ペースト) 各セルに「名前-得票数」という形で表示します。
☆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!となってしまいました・・・。 なぜでしょう・・・???
得票数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です。
- SAKURAMYLOVE
- ベストアンサー率30% (162/533)
たとえば、質問の下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) というように入力します。
- sanpin-cha
- ベストアンサー率48% (533/1095)
RANK関数を使用すればできそうです。 例題のURLを参照してください。
お礼
数値が一番大きい人の名前の表示は可能でしょうか?
お礼
ありがとうございました! 無事思うような操作ができました☆ 本当にありがとうございました!