Excelで群比較の方法とは?

このQ&Aのポイント
  • Excelを使用して群比較を行いたい場合、例題のようなデータを処理することができます。
  • 具体的には、英語の上位20名と数学の上位20名の中で重複している人名を特定することができます。
  • また、英語、国語、数学の上位20名の中で同じ人名がどれかを見つけることもできます。
回答を見る
  • ベストアンサー

Excelで群比較に関する質問です。

下記のような例題について、Excelで処理する方法があれば教えてください。 マクロでも構いませんが、あまり知識が無いのでコメントを入れていただけるとありがたいです。 例題: 列A1~A40に人名。(ex, 相原、井上、、、渡辺) 列B1~B40にテストの点数(国語) 列C1~C40にテストの点数(数学) (中略) 列F1~F40にテストの点数(英語) 上記のようなデータがあるとする。 ここから英語の上位20名と数学の上位20名の中で、どの人名が重複しているか。 また、英語、国語、数学の上位20名の中で同じ人名はどれか。 このような例題です。 手作業でやってやれないことはないのですが、 実際の処理が膨大になるので、二郡(あるいは複数郡)の比較方法で、 適当な方法があれば教えてください。よろしくお願いします。

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

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

sub macro1() ’せめて1行目はタイトル行にするのが当たり前  range("1:1").insert  range("A1:H1") = array("氏名","国語","数学","","","英語","英数","英国数") ’G列に英数上位者をマーク  range("G2:G41").formula = "=(F2>=LARGE(F:F,20))+(C2>=LARGE(C:C,20))" ’H列に英国数上位者をマーク  range("H2:H41").formula = "=G2+(B2>=LARGE(B:B,20))" ’英数ともに優秀者を抽出、コピー  range("G:G").autofilter field:=1, criteria1:=2  range("A:A").copy range("J1")  range("J1") = "英数優秀者"  activesheet.autofiltermode = false ’英国数ともに優秀者を抽出、コピー  range("H:H").autofilter field:=1, criteria1:=3  range("A:A").copy range("K1")  range("K1") = "英国数優秀者"  activesheet.autofiltermode = false end sub マクロにやらせてるその通りに手で行えば、マクロなんて使わなくても簡単に結果を出せます。

mi_stan
質問者

お礼

系統ごとに優秀な人を数値でマークして、 そのマークを基に条件に適合する人を探すという方法ですね。 確かにこれなら手作業でも手間なくできそうです。 回答ありがとうございました。

その他の回答 (3)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.4

作業列を作って対応するのがよいでしょう。 A1セルからF1セルにかけては氏名、国語、数学、・・と科目名が2文字で入力されているとしてその下方にそれぞれのデータが入力されているとします。 そこで上位20名の点数のランクをそれぞれの教科について調べ、それをN列からR列までに表示させます。 N1セルからR1セルにはB1セルからF1セルまでの教科名をコピーして貼り付けます。 N2セルには次の式を入力してR2セルまでドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(B2="","",IF(RANK(B2,B:B)<=20,RANK(B2,B:B),"")) これで最上位から20番目の方のランクの番号が表示されます.。同じランク(点数)の方が多くいる場合には20人よりも多くの方に番号が付くこともあります。 このような作業列はその方のランクが直視できることで有意義であると思います。 この作業列のデータを使ってお求めの該当の方の氏名を表示させるわけですが例えばH1セルには英語と国語でランクが20位以内の方を表示させるためには 英語1国語 のように入力します。ここで間の1の数値は半角英数文字にしてください。 H2セルには次の式を入力して下方にドラッグコピーします。 =IF(AND(INDEX($N:$R,ROW(),MATCH(LEFT(H$1,2),$N$1:$R$1,0))<>"",INDEX($N:$R,ROW(),MATCH(MID(H$1,FIND("1",H$1)+1,2),$N$1:$R$1,0))<>""),$A2,"") H1セルに書かれた教科についてともに20位以下になっている方が表示されます。 次に3つの教科について20位以下の方についてI列に表示させます。 I1セルにはH1セルにならって 英語1国語2数学 のように入力します。 I2セルには次の式を入力して下方にドラッグコピーします。 =IF(AND(INDEX($N:$R,ROW(),MATCH(LEFT(I$1,2),$N$1:$R$1,0))<>"",INDEX($N:$R,ROW(),MATCH(MID(I$1,FIND("1",I$1)+1,2),$N$1:$R$1,0))<>"",INDEX($N:$R,ROW(),MATCH(MID(I$1,FIND("2",I$1)+1,2),$N$1:$R$1,0))<>""),$A2,"") H列やI列ではとびとびになって該当者が表示されますね。それらの氏名をまとめて表示させるためにK列とL列を使用します。 H1セルとI1セルの科目名をK1からL1セルに貼り付けます。 K2セルには次の式を入力し式を確定する段階でCtrlキーとShiftキーを同時に押しながらEnterキーを押します。 =INDEX(H:H,SMALL(IF(H$2:H$50<>"",ROW(H$2:H$50),1000),ROW(A1)))&"" その後にK2セルの式をL2セルまでドラッグコピーしたのちに下方にもドラッグコピーします。 K列とL列にはお望みの教科についてともに1位から20位以下となる方の氏名がまとめて表示されることになります。 なお、式をできるだけ簡単にするために教科名は必ず2文字で入力することとしています。 教科名を変えた場合でも即座に対応した表が得られます。

mi_stan
質問者

お礼

作業台と式の組み合わせだけでできるんですね。 MATCH関数は使ったことがなかったので、機会を見て使ってみようと思います。 回答ありがとうございました。

回答No.3

フィルタ(古いバージョンではオートフィルタ)を表に取り付けて、表示されるボタンを押すと、どこかに「トップテン」というものがあります。それで上位または下位の 20 位以内に絞り込んでください。 同時に複数の列について、それぞれの 20 位以内のレコードに絞り込めます。つまり英語、国語、数学の列で同時に 20 位以内になるようにしたときに、残っている名前が答えです。絞り込んだ状態で表をコピーして、別シートに貼り付けて保存しておいたりしてもいいですね。 エクセル2010基本講座:数値フィルターのトップテン http://www4.synapse.ne.jp/yone/excel2010/excel2010_filter3.html なお各人の順位を求めたい場合、基本技としては、RANK 関数というものあたりを使って計算します。 Excel(エクセル)基本講座:順位の関数 http://www.eurus.dti.ne.jp/yoneyama/Excel/kansu/rank.htm

mi_stan
質問者

お礼

そういえばこういう機能もあったですね。今回の場合だとこの機能が一番簡単かもしれません。 Excelは便利なんですが、バージョンごとに機能とその場所が変わって困り物です(笑) 回答ありがとうございました。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.1

添付画像のようなレイアウトなら、例えばH列に英語と数学がいずれも上位20位以内の人の行に○を記載するように以下の数式をH2セルに入力して下方向にオートフィルします。 =IF(AND(RANK(F2,$F$2:$F$40)<=20,RANK(C2,$C$2:$C$40)<=20),"○","") 英語、数学、国語の3科目の場合は上記の条件式にもう1つB列を判定するる数式をANDの中に追加してください。

mi_stan
質問者

お礼

なるほど。ifとrankの組み合わせでできるんですね。 両方とも知っていた関数だけに目からうろこです。 どうもありがとうございました。

関連するQ&A

  • Excelの質問

      A   B 1山田 65 2佐藤 77 3田中 77 4小林 90 Aの列を生徒の名前、Bの列をテストの点数とします。上位三名の名前をC1、C2、C3に書き出したいのですがうまくできません。また、この例のように点数が同じ人がランクインしている場合は五十音順になるようにもしたいのですがやり方が分かりません。どなたか教えてくれないでしょうか。

  • <未解決>Excel(エクセル)でテストの結果をマクロで個人票にしたいんですが…

    エクセルのマクロを使って、下記のように個人票を作りたいです。いろいろ参考になりそうな同類の質問もあるのですが、私は初心者で、自分のして欲しいものと微妙に違うので書き換えられないので質問しました。詳細を書きます。分かりやすいように学校のテスト風に書きます。 <元の物> │1学期中間テスト│ │氏名│国語│英語│数学│日史│・・・│合計│平均│国順│英順│数順│日順│・・・│総合│ │人A│70│80│90│85│・・・│800 │88.9│3  │5  │ 2 │ 3│・・・│1 │ │人B│60│70│80│75│・・・│790 │87.9│5 │7  │ 4 │ 4│・・・│2 │ │・ │・ │・ │平均│55│60│70│64│・・・│515│578.2│ <マクロ使用後> │1学期中間テスト│空白セル×2│人A│ │  │国語│英語│数学│日史│・・・│合計│平均│ │点数│70│80│90│85│・・・│800 │88.9│ │順位│3  │5  │ 2 │ 3│・・・│1 │ │平均│55│60│70│64│・・・│515 │57.2│ │ │1学期中間テスト│空白セル×2│人B│ │  │国語│英語│数学│日史│・・・│合計│平均│ │点数│60│70│80│75│・・・│790 │87.9│ │順位│5 │7  │ 4 │ 4│・・・│2 │ │平均│55│60│70│64│・・・│515│578.2│ ━以上━ (1)テスト名、科目名、人名等は毎回変わるのでそれに対応できるように。 (2)また、科目数、人数も変わるのでそれにも対応できるように。 (3)最初に、│テスト名│を入れ、2つ空白セルを作り、│名前│を入れる。 (4)次の行にセルを1つあけて、順に科目名、合計、平均 (5)次に「点数」といれて、その後に各人の点数 (6)次に「順位」といれて、その後に各人の順位 (7)最後に「平均」といれて、科目ごとの全体の平均 (8)人と人の間に空白の行1行 それぞれの合計、平均、科目ごとと総合の順位と科目ごとの平均はすでに算出されているものとしてつくっていただければ結構ですが、もしできれば、それも作ってくれるマクロだとなおさら嬉しいです。ちなみに│ │と「 」の違いは、前のセルを引用してくるか、その文字を新しく挿入するかの違いです。技術的に可能か不可能かも私にはわからないので、もし不可能ならばそのように教えてください。 お忙しいとは思いますが、よろしくお願いします。

  • テスト

    もうすぐ私達の学校で中間テストが始まります。 数学,国語,英語,理科,社会,保健体育をテストします。 ちなみに私達の学校の合格点数は60点です。 国語と英語はいつもその合格点数を取れません。 それに数学等の復習は出来ますけど、特に国語と英語の復習のやり方が分かりません。 どうやって復習をすれば国語と英語の合格点数を取れるのでしょうか?

  • エクセルの質問です。

    エクセル2003を使用しています。 元データには   A   B(国語点数) C(算数点数) D(社会点数) E(理科点数 F(英語点) G(合計) 1 名前(1)   90        85        70       100      20    365 2 名前(2)   85        20        40       70       50    265    3 名前(3)   50        90        60       70       80    350 というデータを     A    B    C 1 名前(1)  国語  90 2        算数  85 3        社会  70 4        理科  100 5        英語  20 6        合計  365 7 名前(2)  国語  85 8        算数  20 9        社会  40 10       理科  70 11       英語  50 12       合計  265       ・       ・       ・ となるように表示していきたいのですが… ただのセルのコピーでは人が連続してコピーできませんでした。 何かいい方法があるかたはご教授ねがいます。 よろしくお願いします。   

  • テストの点数や、内申点が伸びないのですが

    こんにちは。rozetと申します。 タイトルどおりの質問なのですが テストの点数や内申点がのびません。 テストは一教科60点満点の五教科 (国語数学理科社会英語)です。学力テストの点数は 国語41点 数学15点 理科43点 社会38点 英語38点の合計175点です。ランクはGの上段です。 今回の総合A(受験の参考にされるテスト)では 数学14点 英語36点 理科30点の最悪な点数です。 (国語社会はまだ返ってきていません)  僕が目指しているのは最低ランクGかFで 合格点数平均が140から156の工業高校の電気科です。 大して難しくはありませんが、このままではものすごく不安です。 いい勉強方法や参考書をご存知の方 この厨房に教えていただけないでしょうか。

  • Excelで順位をつけたい

     お世話になります。よろしくお願いいたします。    エクセルでの順位の付け方です。  例えば、  国語、数学の2教科のテストの結果で順位をつけるとします。     列A  列B   列C   列D 行1      国語   数学  合計点 行2  A君  40    60   100 行3  B君  50    50   100 行4  C君  60    40   100  上記のような結果の時に普通に「RANK」を使うと、3人全員が「一位」になりますが、  合計点が同じ場合は、国語の点数が良い者から、「一位・二位・三位」になるようにしたいのです。  したがって、C君が「一位」・B君が「二位」・A君が「三位」になるようにするには、 どのようにすればよろしいですか?お教えください。

  • Excelでの縦棒グラフの作り方

    作りたいのは、たとえば 「国語(60)、数学(70)、英語(80)、社会(90)、理科(50)と5教科の合計(350)」という項目があります。 合計の縦棒グラフの中を国語は60、数学70という風に5教科それぞれの点数で区切ったグラフを作りたいのですが、方法が分かりません。よろしければ、どなたか教えてください。

  • エクセルで困っています。

    当方、今エクセルやってます。 データがあるんですが(受験生1,2...20までの国語数学スワヒリ語の点数)それぞれの生徒の受けた3科目の内上位2科目(国30数学31ス32だったら31と32)の和を求めろというんです。 3科目なんで普通に見ただけで上位2科目分かるんですが、自分で計算してはだめということで、どの関数を使えばよいのか教えてください。

  • エクセルでの成績処理

    こんにちは いつもお世話になっています。 エクセル2003です。 成績処理のマクロを教えてください。 以下の表があります。 NO.   名前   国   算   理   国語クラス  算数クラス  理科クラス 1     A   100   75   80    1       2   2 2     B   70    85   90    2       3   1 3     C   100   75   95    1       1   1 4     D   85    95   85    3       2   3 5     E   75    80   75    2       1   2 6     F   85    70   90    3       2   1 7     G   100   90   80    1       1   3 8     H   95    85   90    2       3   2 9     I   100   85   70    1       3   3 数字がずれてすみません。 A列に連番、B列に名前、C-E列に教科ごとの点数、F-H列に教科ごとの所属クラス 実際は150名分のデータでクラスも多いですが。 この表から各教科の点数の上位3位までのクラス別順位表を作りたいのです。 その際に、順位も名前の左側につけたいです。(同セル内でも、名前セルの左でもかまいません) 同順位であれば連番の昇順で。 つまり 国語1クラス 1 A 2 C 3 G 4 I 国語2クラス 1 H 2 E 3 B という具合に、できれば、別シートにマクロで出すコードを教えてください。 勝手ながら、人数が増えても応用しやすいものだと助かります。 現在はオートフィルでの手作業をしています。

  • 国語だけテストの点数が取れなくて困ってます。中3で

    僕は今回期末テストの点数が返されたのですが、理科が平均40で60点社会が平均71で94、数学が平均55で74.英語が平均50で62、国語が平均60の中僕は40です。どうしても国語だけ点数が伸びません。ちゃんと期末テストの範囲も勉強したのですが本当に国語だけ取れません。もうそろそろ受験ですが国語の点数をあまり取れる気がしません。どうすれば国語の点数を取れるでしようか

専門家に質問してみよう