エクセルでクラス別に各教科の順位と名前を抽出する方法

このQ&Aのポイント
  • エクセルを使用して、クラス別に各教科の順位と名前を抽出する方法を教えてください。初心者向けの方法も教えていただけると助かります。
  • エクセルの関数を使用して、クラス別に各教科の順位と名前を抽出する方法を教えてください。ピボットテーブルを使う方法もありますか?初心者向けの解説があれば嬉しいです。
  • エクセルでクラス別に各教科の順位と名前を取得する方法を教えてください。エクセル2007を使用しています。初心者向けの手順解説をお願いします。
回答を見る
  • ベストアンサー

エクセル クラス別に各教科の順位と名前を抽出

こんにちは いつもお世話になっています 参照先を見ていただくと助かるんですが、御面倒をおかけします。 http://oshiete.homes.jp/qa6551932.html 質問内容はこちらと同じですが こちらの関数を使わせてもらおうとしたところ失敗しています。 J2セルに =IF(OFFSET(E2,0,MATCH(成績順位!C$1,C$1:E$1,FALSE))=成績順位!C$2,OFFSET(B2,0,MATCH(成績順位!C$1,C$1:E$1,FALSE))-A2/1000,"") と入力した時点でエラーが出ました。 他の関数でも構いません。マクロでは複雑で応用が難しいと思っています。 クラス別に各教科の順位と名前を抽出する方法を教えてください。 ピボットテーブルでもできるでしょうか? 初心者用のものだと助かります。 エクセル2007

  • 5goma
  • お礼率82% (265/321)

質問者が選んだベストアンサー

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.6

>順位調整できるでしょうか。  例えばある教科のαクラスにおいて同点2位が3人いて、同じ教科のβクラスに2位は1人しかいなかった場合、A列には何位を表示させるべきか決める事が出来なくなります。  ですから、同じ点数の場合は同じ順位とする場合には、別の列に纏めて順位を表示させる事は諦めねばなりません。  そこで、1つのセル内に 1位 A 100点 といった具合に、順位と名前と点数を、同じセルの中に纏めて表示する事にします。  そのためには、各教科のシートのB3セルに入力する関数を次の様なものに変更して下さい。 =IF(COUNTIF(Sheet2!$1:$1,$A$1),IF(ROWS($3:3)>COUNTIF(OFFSET(Sheet1!$H:$H,,MATCH($A$1&"クラス",Sheet1!$H$1:$L$1,0)-1),B$2),"",COUNTIFS(OFFSET(Sheet1!$C:$C,,MATCH($A$1,Sheet1!$C$1:$G$1,0)-1),">"&INDEX(Sheet1!$C:$G,MATCH(B$2&"☆"&ROWS($3:3),OFFSET(Sheet2!$A:$A,,MATCH($A$1,Sheet2!$A$1:$E$1,0)-1),0),MATCH($A$1,Sheet1!$C$1:$G$1,0)),OFFSET(Sheet1!$H:$H,,MATCH($A$1&"クラス",Sheet1!$H$1:$L$1,0)-1),B$2)+1&"位 "&INDEX(Sheet1!$B:$B,MATCH(B$2&"☆"&ROWS($3:3),OFFSET(Sheet2!$A:$A,,MATCH($A$1,Sheet2!$A$1:$E$1,0)-1),0))&" "&INDEX(Sheet1!$C:$G,MATCH(B$2&"☆"&ROWS($3:3),OFFSET(Sheet2!$A:$A,,MATCH($A$1,Sheet2!$A$1:$E$1,0)-1),0),MATCH($A$1,Sheet1!$C$1:$G$1,0))&"点"),"")  以上です。

5goma
質問者

お礼

kagakusuki 様 ありがとうございました。お蔭様で解決しました。 早速の御返事、恐れ入ります。 順位も点数も表示され驚きました。 大切に使わせていただきます。 簡単で恐縮ですが、お礼申し上げます。

その他の回答 (5)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

 ANo.3です。 >科目が増えた時の関数はどこを直せばよいでしょうか。 >例えば、「理科」の次に「社会」(F1セル)「英語」(G1セル)などを入れたい時です。 Sheet1のH1セルの関数は =IF(INDEX($C:$G,ROW(),COLUMNS($H:H))="","",INDEX($C:$G,ROW(),COLUMNS($H:H))&"クラス") Sheet2のA1セルの関数は =INDEX(Sheet1!$C:$G,ROW(),COLUMNS($A:A))&"" Sheet2のA2セルの関数は =IF(AND(INDEX(Sheet1!A:A,ROW())<>"",INDEX(Sheet1!B:B,ROW())<>"",ISNUMBER(INDEX(Sheet1!C:C,ROW())),INDEX(Sheet1!H:H,ROW())<>""),INDEX(Sheet1!H:H,ROW())&"☆"&COUNTIFS(Sheet1!C:C,">"&INDEX(Sheet1!C:C,ROW()),Sheet1!H:H,INDEX(Sheet1!H:H,ROW()))+COUNTIFS(Sheet1!C$1:INDEX(Sheet1!C:C,ROW()),INDEX(Sheet1!C:C,ROW()),Sheet1!H$1:INDEX(Sheet1!H:H,ROW()),INDEX(Sheet1!H:H,ROW())),"") 各教科のシートのA1セルの関数は変更なしの =REPLACE(CELL("filename",A1),1,FIND(".xlsx]",CELL("filename",A1))+LEN(".xlsx]")-1,) 各教科のシートのB3セルの関数は =IF(COUNTIF(Sheet2!$1:$1,$A$1),IF(ROWS($3:3)>COUNTIF(OFFSET(Sheet1!$H:$H,,MATCH($A$1&"クラス",Sheet1!$H$1:$L$1,0)-1),B$2),"",INDEX(Sheet1!$B:$B,MATCH(B$2&"☆"&ROWS($3:3),OFFSET(Sheet2!$A:$A,,MATCH($A$1,Sheet2!$A$1:$E$1,0)-1),0))),"") になります。  教科の数を増やす際には、例えば最初は3教科だった処を5教科に場合には、Sheet1のC列~D列の間と、Sheet1のF列~H列の間、それとSheet2のA列~C列の間に、それぞれ2列ずつ列を挿入(例えばE列の前に2列だけ挿入する際には、E1セルの上にある「E」と表示されているマス目とその右隣の「F」と表示されているマス目をまとめて選択→選択範囲を示す黒い太枠の内側にカーソルを合わせてマウスを右クリック→現れた選択肢の中にある[挿入]をクリック)してから、Sheet1のH1セル、Sheet2のA1セル、Sheet2のA2セル、各教科のシートのB3セル等の関数を入力したセル(各教科のシートのA1セル以外)をコピーし直せば良い訳です。

5goma
質問者

お礼

kagakusuki 様 ありがとうございました。 お陰さまで成功しました。 更に重ねてお尋ねするのは気が引けるのですが 同点のケースがあるのですが、順位調整できるでしょうか。 順位表記の方が面倒であれば、順位表記なしで、順位ごとに名前と一緒に点数をつけていただけると助かるんですが。もちろん、順位表記の調整できれば点数は不要です。 勝手なお願いですみません。気長にお待ちしております。

回答No.4

ものの順序としてJ~L列に、科目別通算順位から、 J2に、 =RANK(C2,C$2:C$999) これを、横にK、L列までコピー 次、M~O列に、科目別クラス別順位、(何の意味があるのか??) M2に、 =SUMPRODUCT((F$2:F$999=F2)*(C$2:C$999>C2))+1 これまた、横にN、O列までコピー J2~O2が揃ったら、まとめて下に必要な数コピー 「科目別クラス別順位」といわれてもこのままでは何のこっちゃ?、読めないですね... フィルタかませて読む??

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 今仮に、元データの表において、「NO.」という項目名が入力されているセルが、Sheet1のA1セルであり、Sheet2のA列~C列を作業列として使用して、各教科毎のシートに、クラス別の成績順に名前を表示させるものとします。  まず、Sheet1の表において、C1~E1に入力する教科名を、「国」、「算」、「理」の様な省略形ではなく、「国語」、「算数」、「理科」の様に省略しない形で入力して下さい。  次に、Sheet1のF1セルに次の関数を入力して下さい。 =IF(INDEX($C:$E,ROW(),COLUMNS($F:F))="","",INDEX($C:$E,ROW(),COLUMNS($F:F))&"クラス")  次に、Sheet1のF1セルをコピーして、Sheet1のG1~H1の範囲に貼り付けて下さい。  次に、Sheet2のA1セルに次の関数を入力して下さい。 =INDEX(Sheet1!$C:$E,ROW(),COLUMNS($A:A))&""  次に、Sheet2のA2セルに次の関数を入力して下さい。 =IF(AND(INDEX(Sheet1!A:A,ROW())<>"",INDEX(Sheet1!B:B,ROW())<>"",ISNUMBER(INDEX(Sheet1!C:C,ROW())),INDEX(Sheet1!F:F,ROW())<>""),INDEX(Sheet1!F:F,ROW())&"☆"&COUNTIFS(Sheet1!C:C,">"&INDEX(Sheet1!C:C,ROW()),Sheet1!F:F,INDEX(Sheet1!F:F,ROW()))+COUNTIFS(Sheet1!C$1:INDEX(Sheet1!C:C,ROW()),INDEX(Sheet1!C:C,ROW()),Sheet1!F$1:INDEX(Sheet1!F:F,ROW()),INDEX(Sheet1!F:F,ROW())),"")  次に、Sheet2のA1~A2の範囲をコピーして、Sheet2のA1~C2の範囲に貼り付けて下さい。  次に、Sheet2のA2~C2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。  次に、適当な教科のシート(ここでは仮に「国語」というシート名のシートとします)のB2から始めて右に向かって、各クラスの名称を入力して下さい。  次に、国語シートの A3セルに  1位 A4セルに  2位 A5セルに  3位 A6セルに  4位   ・      ・   ・      ・   ・      ・ と言う具合に、順位を示す項目名を入力して下さい。  次に、国語シート(各教科のシート名は、Sheet1の表においてC1~E1に入力した文字列と同じ文字列として下さい)のA1セルに次の関数を入力して下さい。 =REPLACE(CELL("filename",A1),1,FIND(".xlsx]",CELL("filename",A1))+LEN(".xlsx]")-1,)  次に、国語シートのB3セルに次の関数を入力して下さい。 =IF(COUNTIF(Sheet2!$1:$1,$A$1),IF(ROWS($3:3)>COUNTIF(OFFSET(Sheet1!$F:$F,,MATCH($A$1&"クラス",Sheet1!$F$1:$H$1,0)-1),B$2),"",INDEX(Sheet1!$B:$B,MATCH(B$2&"☆"&ROWS($3:3),OFFSET(Sheet2!$A:$A,,MATCH($A$1,Sheet2!$A$1:$C$1,0)-1),0))),"")  次に、国語シートのB3セルをコピーして、国語シートのC3~D3の範囲に貼り付けて下さい。  次に、国語シートのB3~D3の範囲をコピーして、同じ列の4行目以下に貼り付けて下さい。  次に、国語シートのコピーシートを複数複製し、各々のシート名を各教科の名称として下さい。  その際、シート名は必ずSheet1の表においてC1~E1に入力した文字列と同じ文字列として下さい。  これで、各教科毎のクラス別順位表が自動的に作成されます。

5goma
質問者

お礼

kagakusuki 様 ありがとうございました。お蔭様で解決しました。 重ねて質問させていただきたいのですが、 科目が増えた時の関数はどこを直せばよいでしょうか。 例えば、「理科」の次に「社会」(F1セル)「英語」(G1セル)などを入れたい時です。 Sheet1のF1セルには =IF(INDEX($C:$G,ROW(),COLUMNS($H:H))="","",INDEX($C:$G,ROW(),COLUMNS($H:H))&"クラス") として、 Sheet2のA1セルには =INDEX(Sheet1!$C:$G,ROW(),COLUMNS($A:A))&"" としました。 Sheet2のA2セルにいれる関数ではどこを変えればいいでしょうか。 =IF(AND(INDEX(Sheet1!A:A,ROW())<>"",INDEX(Sheet1!B:B,ROW())<>"",ISNUMBER(INDEX(Sheet1!C:C,ROW())),INDEX(Sheet1!F:F,ROW())<>""),INDEX(Sheet1!F:F,ROW())&"☆"&COUNTIFS(Sheet1!C:C,">"&INDEX(Sheet1!C:C,ROW()),Sheet1!F:F,INDEX(Sheet1!F:F,ROW()))+COUNTIFS(Sheet1!C$1:INDEX(Sheet1!C:C,ROW()),INDEX(Sheet1!C:C,ROW()),Sheet1!F$1:INDEX(Sheet1!F:F,ROW()),INDEX(Sheet1!F:F,ROW())),"") この後の関数も教えてもらえないでしょうか。 初心者質問で恐縮です。よろしくお願いします。

回答No.2

どのようなエラーが出るかも書かれていないほどの関数の知識がないのでしょう。 単純な関数とオートフィルターを組み合わせればよいと思います。 1. オートフィルターをかけたときに表示されないものを0とする   I2セル =SUBTOTAL(9,C2)   右へ下へオートフィル 2. それぞれの順位   =RANK(I2,I$2:I$10)   右へ下へオートフィル 3. それぞれのクラスをオートフィルターで抽出します 数式やマクロを単純にコピペしたってダメです。理解できないなら何にもなりませんよ。

5goma
質問者

お礼

CoalTar様 ありがとうございました。お陰さまで解決しました。 画像まで付けていただき助かりました。 大切に使わせていただきます。 簡単で恐縮ですがお礼申し上げます。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

数式を駆使してももちろん出来ますが、ピボットテーブルの方がはるかに簡単に出来るので、そちらをご紹介します。 手順: レポートフィルタに「国語クラス」 行ラベルに「名前」 Σ値に「合計/国」 を配置 集計内のセル(サンプルではAの100点のセル)を右クリックして「並べ替え」で「降順」をセット 「名前 ▼」を右クリックして「フィルタ」から「トップテン」で「上位3項目」をセット あとはページフィルタで国語のクラスを選択すれば出来上がり。 科目ごとに作成してください。

5goma
質問者

お礼

keithin様 ありがとうございました。お陰さまで解決しました。 丁寧に教えていただき助かりました。 大切に使わせていただきます。 簡単で恐縮ですがお礼申し上げます。

関連するQ&A

  • エクセル 順位表

    エクセル 順位表 いつもお世話になります。 売上実績表の中に、順位表を追加したいのですが、実績表から抽出すると、同一の実績の営業所は、すべて同じ営業所になってしまい困っています。 A    B    C   D    E   F 営コード 実績      順位  営コード  実績 2     200   1   5  500 3   400   2   3  400 4   300   3   4  300 5   500   4   4  300 6   300   5   4  300 7    300 順位3、4、5位は、それぞれ4,6,7の営業所コードを表示したいのですが、どうしたらいいでしょうか。 F列には、F2=LARGE(B:B,ROW(A1)) E列には、E2=INDEX(A:A,MATCH(F2,B:B,0)) 営業所数は100程あり、ピボットテーブルを使用せずに作成したいです。 色々条件がついてますが、よろしくお願い致します。

  • Excelの順位と抽出

    A列にはRANK関数でつけた順位 B列には氏名 C列には点数 D列にはVLOOKUP関数で順位昇順の氏名 があります。 今回はA、C、Dさん退席、次はB、Gさん退席…と出入りが激しい場合、 このままでは人数が多いと頭の中でいない人を排除して見る事になって D列が分かりづらくて仕方ありません。 存在している人を抽出する方法はありませんか?

  • エクセルで男女別の順位

    エクセルで個人毎の成績表を100名分ほど作成しています。 次のような項目で,全体順位は簡単に表示できたのですが,最後に男女別の個人順位を表示するには,どのような関数を使えば良いのでしょうか? どなたか教えてください。よろしくお願いします。 【項目】  氏名  性別  成績1  成績2  成績計  全体順位  男女別順位   A   男   B   女   C   女   D   男

  • 順位別に抽出したい

    excel2007でアンケート結果の集計をしております。     A    B    C    D    E 1 あ支店 い支店 う支店 え支店 お支店 ←支店名 2   4.25   3.12   6.00   2.50   6.00 ←結果 という表があったとします。 同じシートの他の場所に  1位   2位   3位   4位   5位  お支店 う支店 あ支店 い支店 え支店 と、順位を出したいのですが、上記の表の様に結果が同数の場合もあり しかも、同数だった場合には、別表に記載してある順に並べなければ いけません。 別表は[セル1つにつき支店名1つ]が横に並んでいるだけです。 例:お支店|い支店|あ支店|う支店|え支店 INDEX関数やMATCH関数などを使ってみたのですが、 どうしても結果が同数の場合がわかりません。 なるべく関数でやりたいのですが、無理な場合はマクロで処理しよう かと思っています。 良い方法はありませんでしょうか? お知恵をお貸しください。 質問内容が分かりづらい場合は補足いたします。

  • エクセルで順位表

    エクセルをつかった成績の順位表の関数についておしえてください   数学(点)   英語(点)   合計(点)   順位 Aさん   1      2      3       6 Bさん   2      4      6       4 Cさん   5      5       10      2 Dさん   6       7      13      1 Eさん   4      0      4      5 Fさん   6      4      10      2 ひとまず上記のような表をつくったのですが、さらに下記のような順位表をつくりたいのです。 1位 Dさん 2位 Cさん    Fさん 4位 Bさん 5位 Eさん 6位 Aさん ここで問題なのが同じ点数がある場合が多いので、どう表示させるべきかもよくわかりません。よろしくおねがいします

  • 同順位のときに別な条件を用いて比較し順位を決める

    Excelで図のように同順位が出た場合、特定のセルとセルの値を比較して処理し、同順位がない状態にしたい時、どのような関数を組めばいいでしょうか。 競技:10分間で問題文をストレートコピーする。誤字脱字等があった場合にはエラーとし、1エラーにつき10文字分減らすものとする。 「純成績」で順位を競います。多い方が上位、少ない方は下位となります。 「純成績」は次のような方法で算出されます。 「純成績」=「入力した文字数」-「エラー数」✕10 しかしながら、図にあるように、RANK関数を使って「純成績」をもとに順位をつけると同じ「純成績」の場合は同順位となってしまいます。 理想としては、同じ「純成績」が存在する場合は、それぞれの「エラー数」を確認し、「エラー数」が少ない方を上位、「エラー数」が多い方を下位として、「順位」を表示させたいのです。 詳しくは図を御覧ください。 以上より、質問はこちらです。 Q.「E12(E2)」にどのような関数を設定すれば、実現できるでしょうか。 ※オートフィルを用いて「E18(E8)」までそれぞれ関数を入力するものとする。 ご回答よろしくお願いします。

  • エクセルで数字が入ったセルの値を抽出

    任意1行中のある1列にFALSEと1列だけ数字が入っています(下図参照)。その数字を抽出する関数があれば教えて下さい。 下図の例では、Fの列にB2:E2の範囲の数字「10」を抽出したいのです。マクロを組めば可能なのですが、セルに入力する関数等で簡単に実現できればと思います。 アドバイス宜しくお願いします。

  • Excelマクロで、スコアによって順位付けをしたい。

    Excelマクロで、スコアによって順位付けをしたい。 極初心者ですみません 教えて下さい。 ゴルフの成績表が作ってあり、E列に順位付けをしたい。 1.カーソルをE5に移動し(最初の順位入力位置) 2.もしそのセルから4個右側のセル内の数字が30以上であれば(E5)に1(i)を入力し、 3.セル位置を1つ下に移動する。 4.上記2.3.の処理を繰り返す。 5.もし、4個右側が0(ゼロ:不参加)であれば i に50を加えた数字を入力する。 という作業をしたいのですが、どうしても解りません、教えて下さい。 以下は、自分が作ったマクロですが、コンパイルエラーで作動しません。 Sub 順位付け() ' 順位付け Macro ' 優勝2位3位の順位付けを行う For i = 1 To 34 If Cells(i, 4).Value > 30 Then Value = i Range(E5).Offset(i, 0).Select Else Value = i + 50 Range(E5).Offset(i, 0).Select End If Next i End Sub

  • Excel ベスト3の名前を表示

    Excel2007 の環境で作業しています。 LARGE関数・INDEX関数・MATCH関数を駆使して成績表からベスト3の得点と名前を拾ってきて、「ベスト3表」を作っています。 表は、画像にて確認お願いします。 セルJ2には「=LARGE($C$3:$C$7,H3)」の式で、H3の順位の点数を表示しています。セルI3に「=INDEX($B$3:$B$7,MATCH(J3,$C$3:$C$7,0))」で、セルJ2で得た値から名前を拾ってくるようにしたんですが、画像の通り、同じ点数の場合は学生番号の若い人が表示されてしまいます。こうなることは予想できていたのですが、問題はこれを回避して、次の人の名前を表示できるようにしたいと思っています。 例えば、 1 Aさん 100点 2 Bさん 90点 3 Cさん 90点 4 Dさん 70点 5 Eさん 80点 の成績表があったときに、 1位 Aさん 100点 2位 Bくん 90点 3位 Cくん 90点 のように表示したい。 もしくは、Eさんも90点であるのであれば、 1位 Aさん 100点 2位 Bくん 90点 3位 Cくん 他1名 90点 のように、学生番号の若い人が優先的に表示され、同順位がベスト3位で表示しきれない場合は、「他○名」と3位の人の名前の後につけたいと思っています。(もしくは、3位の下に他1名と表示でもいいです) 我儘を言えば、順位も1・2・2のように2位タイとなれば幸いですが、一先ず、名前が正しく表示されるようにしたいと思っております。さらに詳しい方でお願いできるのであれば、順位も1・2・2のように変動できるようにお願いしたいです。 注文が多いですが、お願いします。

  • エクセル 関数 別シートへの抽出

    エクセル関数について質問します。 「数値の入ったセルだけを、その行ごと丸々別シートに抽出する方法」 について教えてください。 例、C列に空白セルと1、2や3など、数値の入ったセルがあります。空白セル以外の数値の入ったセルを、その行ごと別シートに抽出したい。 C3とC5に数値が入ってる→3行目と5行目を別シートに抽出する。 このようなことは関数でできるのでしょうか? マクロでないと無理でしょうか? お力をお貸しください。 よろしくお願いします。

専門家に質問してみよう