連続しない範囲が複数ある場合の順位の出し方について

このQ&Aのポイント
  • Excelで連続しない範囲のデータの順位を出す方法について教えてください。
  • 学校でのクラス分けで、テストの成績に基づいて習熟度別にクラスを分けたいですが、データの範囲が連続していなくて困っています。
  • 順位を求めるためにrank関数を使用したいですが、連続しない範囲のデータにどのように適用すればいいのでしょうか?
回答を見る
  • ベストアンサー

連続しない範囲が複数ある場合の順位の出し方について

こんにちは、 学校で習熟度別のクラス分けをするのですが、行き詰ってしまったのでよろしくお願いします。 21行~370行目までにデータが入っています(20行目までは平均点などを表示するために空けています)。A列に個人番号10101~10750までが入っています。10101は1年1組1番です。各クラス40人ですが、転入生のことも考え50人分ずつ取っています(ですので2組は71行目、3組は121行目から始まるようになっています)。B列に氏名、C列に点数が入っています。 1組と3組の2クラスを応用、標準、基礎クラスの3クラスに分けて、習熟度別授業をしています。テストの成績でクラス分けをするのですが、1組と3組の計80人から上位35人が応用クラス、次の30人が標準クラス、残りの15人が基礎クラスに分けたいのです。 順位を出すのにrank関数を使うのはわかるのですが、範囲が離れている場合はどのようにしたらよいでしょうか? できれば関数で解決したいのですが、無理ならマクロでもかまいません。 よろしくお願いします。

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

  • ベストアンサー
noname#96418
noname#96418
回答No.4

>順位は#VALUE!と出てしまってできないのです。 念のためにおたずねしますが、2番目の引数の全体をかっこでくくられましたか?手元の2007の97-2003互換モードでは、かっこでくくればうまくゆくのですが・・・

CaveatEmptor
質問者

お礼

ありがとうございます!解決しました。 ご指摘の通り、引数全体をかっこでくくっていませんでした。 助かりました。

その他の回答 (4)

  • NNAQ
  • ベストアンサー率56% (104/184)
回答No.5

1位~80位まで順位を出すとなると、 =MATCH(1,INDEX((LARGE(($C$21:$C$60,$C$121:$C$160),ROW(INDIRECT("1:"&COUNT($C$21:$C$60,$C$121:$C$160))))=C21)*1,),) 順位を出さず、クラス分けだけなら、(A,B,Cの3クラスだとして) =IF(PERCENTRANK(($C$21:$C$60,$C$121:$C$160),C21)<=15/80,"C",IF(PERCENTRANK(($C$21:$C$60,$C$121:$C$160),C21)<=(15+30)/80,"B","A")) または、 =IF(C21<=PERCENTILE(($C$21:$C$60,$C$121:$C$160),15/80),"C",IF(C21<=PERCENTILE(($C$21:$C$60,$C$121:$C$160),(15+30)/80),"B","A"))

CaveatEmptor
質問者

お礼

回答ありがとうございます。 う~ん、複雑ですね。少し時間をかけて解読したいと思います。

  • koko88okok
  • ベストアンサー率58% (3839/6543)
回答No.3

C列のランクに関係のないデータの表示形式を文字列に変更することが可能なら、予め文字列に変更しておけば、範囲を $C$21:$C$370 としても支障なくランクが計算されます。(Excel 2003) ただし、数式を370行までオートフィルした時、文字列の部分は #N/A のエラーが表示されますので、削除する必要があります。

CaveatEmptor
質問者

お礼

回答ありがとうございます。 他のクラスの得点を文字列にするわけにはいかないのです。クラスごとや学年全体の平均も必要ですし、質問には書いていませんでしたが、他に2組と4組も3クラスに分けて習熟度別授業をしていますので。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

作業列使いますが     A     B   C  D  E 20 個人番号 氏名 点数 21 ・・・ D列に =IF(OR(MID(A21,2,2)="01",MID(A21,2,2)="03"),C1,"") E列に =IF(D21="","",IF(RANK(D21,D:D)<36,"応用",IF(RANK(D21,D:D)<66,"標準","基礎"))) 入れて下までコピィしてみては如何でしょうか。

CaveatEmptor
質問者

お礼

回答ありがとうございます。 やはり作業列が要りますね。マクロで配列を使ってやるしかないでしょうかね。

noname#96418
noname#96418
回答No.1

2番目の引数を ($C$21:$C$60,$C$121:$c$160) のように入力してみてください。 2007ではこれで OK です。

CaveatEmptor
質問者

お礼

回答ありがとうございます。 Excelのバージョンは2003なんです。平均はお示しいただいた方法でできるので、試してみたのですが、順位は#VALUE!と出てしまってできないのです。

関連するQ&A

  • 順位をつける範囲について

    以下のようなデータがあります。   A  B 1 あ 3.0 2 あ 3.0 3 あ 3.0 4 あ 3.0 5 い 1.5 6 い 1.5 7 あ 3.0 8 あ 3.0 9 い 1.5 10 い 1.5 11 う 6.8 12 う 6.8 この「あ」「い」「う」の順位を決定するのに、C列にRANK関数を使って範囲をB1:B12にすると   A  B   C  D 1 あ 3.0  5  2 2 あ 3.0  5  2 3 あ 3.0  5  2 4 あ 3.0  5  2 5 い 1.5  1  1 6 い 1.5  1  1 7 あ 3.0  5  2 8 あ 3.0  5  2 9 い 1.5  1  1 10 い 1.5  1  1 11 う 6.8  11  3 12 う 6.8  11  3 となります。でも実際には順位はD列のようにならないといけないですよね。 A列の「あ」「い」「う」がアトランダムにある場合に(A列のどこに存在しても)D列のような順位を出す方法を教えてください。 よろしくお願いいたします。

  • エクセルで順位付けする方法を教えて下さい

    エクセルで順位付けする方法を教えて下さい。 (A列)にクラス、(B列)に学籍番号、(C列)に得点が記載された1つの表があるとします。表にはクラス、学籍番号、得点、順に並んでいないところを、関数で順位付けしたいと考えています。表示結果として、クラス毎で得点の低い順に表示したいと考えています。 具体的には、 元々の表 (A列) (B列) (C列)  A組   8   57  B組   4   41  A組   6   42  C組   3   83  C組   6   73  B組   2   83 結果の表 (A列) (B列) (C列)  A組   6   42  A組   8   57  B組   4   41  B組   2   83  C組   6   73  C組   3   83 非常に煩雑な関数になりそうですが、お力をお貸しいただきたく宜しくお願いいたします。        

  • RANK関数 順位が同じだった場合の条件が2つあります

    RANK関数で求めた結果が同じだった場合、別のフィールドを見に行って順位を同じにしない方法はわかりました。 RANK関数とSUMPRODUCT組み合わせすればいいんですね。 今回は条件が2つあります。 ゴルフの順位を求めたい。 まず結果にて順位を求めました。同じ順位だった場合「IN」の数字を見に行きます。そこでも同じだった場合(「OUT」が違えばありえますよね?) 次に見に行くのが年齢を見に行くそうです。 RANKにSUMPRODCTを2つ組み合わせてみたのですがうまくいきませんでした。 よろしくお願いします

  • 順位付け

    お願いします。順位付けのことで詰まっています。 1位から10位までの月順位を出しますが、同点の場合年間順位で順位を決定しています。        年順位  月順位  修正順位       2     1      1       7     2      2       10     3      10       9     3      9        8     3      8       4     3      5              1     3      3            5     3      6       3     3      4       6     3      7 同点が8個もあり、自動的に年順位を参照して順位決定できる方法 がわかりません。RANK関数の応用ができません。 よろしくお願いします。  

  • エクセルでの順位づけ

    こんにちは 下のような表で、C列に順位をつけて、順位を出すのではなく、 名前を表示したい場合(5行目から7行目)は、どうしたらいいのか困っています。 この関数ならできるというのがありましたら、教えてください。 よろしくお願いします。     A列   B列   C列     (名前) (点) (順位) 1行目 いちろう  40    2 2行目 じろう   30    3 3行目 はなこ   50    1 5行目     第1位  はなこ 6行目     第2位  いちろう 7行目     第3位  じろう

  • RANKIFのような関数ってありますか?

    こんにちは、 知り合いから聞かれたのですが、A列に出席番号、B列に生徒氏名、C列に国立文系、国立理系、私立文系、私立理系、就職・専門というように進路希望があります。 1組~8組のすべてのクラス(各40人)に、進路希望の異なる生徒がいます(単位制高校なので授業はクラス単位で行わないのでいろんな生徒がいるらしいです)。英語と国語は進路希望とは関係なく同じテストをするのですが、英語と国語の学年順位やクラス順位はすぐにRANK関数で求められますが、国立文系の中での順位などを求める関数(やり方)はあるでしょうか? 私のアドバイスとしては、進路希望順にソートして、その中でRANK関数を用いて順位を出すと答えたのですが、値複写しておかなければソートしなおしたときにおかしくなります。ただ値複写すると、採点ミスなどで点数が変わるたびに、やり直さなくてはいけません。 私ならVBAを用いて、配列を使って並べ替えて書き込むというやり方にすると思うのですが、質問者はVBAがわからないので関数で何とかできないでしょうか?

  • 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君が「三位」になるようにするには、 どのようにすればよろしいですか?お教えください。

  • エクセルで順位付け

    お世話になります。宜しくお願いします。 RANK関数で同順位が出た場合に、指定した数値(条件)を参照して順位を出す方法をOK Wave等で探しました。私のニーズに一番近い問答が在りましたので(質問者:Kaizu35 質問No:965845さん)、それを引用させて頂きます。 A列  B列  C列  D列 No1   0.83   1   1 No2   1.29 4 6 No3   1.01 3 4 No4   0.88 2 2 No5   1.01 3 5 No6   0.88 2 3 上の表の様にRANK関数を使うとC列の様な順位になります。それをD列の様な順位にしたいのです。条件として、A列のNo1~No6の通り若い数字順、(例えば、No4の0.88が2位でNo6の0.88が3位とか、No3の1.01が4位でNo5の1.01が5位)の用に同じ0.88でも1.01でもNo4とNo6、No3とNo5ではNo4とNo3の方が若い数字なので、その若い数字の方が順位は上になるようにするには、どのような関数を使えばいいのでしょうか。(上記の説明でご理解戴けるでしょうか?) 当方、エクセル関数を始めたばかりですので、なるべく解りやすくご教授をお願いします。

  • エクセル関数の順位つけで教えてください

    順位つけで10行全部に関数を入れておき AとBに時間を入れた場合に、入れたところだけD列に 1から順位がつくようにする関数を 教えてください。

  • アクセスで順位付けしたいのですが・・・

    成績表などをアクセスで作って管理していますが、順位をつけたいときはどうしたらいいのでしょうか? RANK関数みたいなものがあればいいのですが・・・。エクセルで別にランクをつけたものをインポートしなおとだめなんでしょうか?

専門家に質問してみよう