• 締切済み

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

layyの回答

  • layy
  • ベストアンサー率23% (292/1222)
回答No.11

Sub RANKING() Dim I As Long Dim J As Long Dim K As Long Dim M As Long '算出行数 Dim XX As String Dim YY As String Dim ZZ As String Dim X(10) As String 'A列 Dim Y(10) As String 'B列 Dim Z(10) As String 'C列 Dim R(10) As String '順位 Range("A1").Select M = 0 'とりあえず10行までループ、値があるものはワークへ退避 For I = 1 To 10 If Len(Cells(I, 1)) > 0 Then M = M + 1 X(M) = Cells(I, 1) Y(M) = Cells(I, 2) Z(M) = Cells(I, 3) R(M) = 0 End If Next I 'ワークへ退避したものを並べ替え(A列違えば相互入替、C列違えば相互入替) For I = 1 To M - 1 For J = I + 1 To M If X(I) > X(J) Then XX = X(J) X(J) = X(I) X(I) = XX YY = Y(J) Y(J) = Y(I) Y(I) = YY ZZ = Z(J) Z(J) = Z(I) Z(I) = ZZ Else If X(I) < X(J) Then Else If Z(I) > Z(J) Then XX = X(J) X(J) = X(I) X(I) = XX YY = Y(J) Y(J) = Y(I) Y(I) = YY ZZ = Z(J) Z(J) = Z(I) Z(I) = ZZ End If End If End If Next J Next I '並べ替えしたものに順位付け K = 1 R(1) = 1 For I = 1 To M If X(I - 1) <> X(I) Then K = 1 Else If Z(I - 1) <> Z(I) Then K = K + 1 End If End If R(I) = K Next I '順位付けしたものをセルへ貼り付け For I = 1 To M Cells(I, 5).Value = X(I) Cells(I, 6).Value = Y(I) Cells(I, 7).Value = Z(I) Cells(I, 8).Value = R(I) Next I MsgBox ("終了") End Sub ざっと作成してみたので参考。 あとはデバッグして調整してください

関連するQ&A

  • エクセルでの順位付け

    エクセルでの順位付けについて教えて下さい。 下記のような順位付けをしたいのですがどのような操作をしたらよいでしょうか。 A 30    1 D 50 B 10  → 2 A 30 C 30    2 C 30 D 50    4 B 10 (得点の多い方から1,2,3・・とし、同点の場合は同順位として次の順位を空位にする)

  • エクセルで順位付け

    お世話になります。宜しくお願いします。 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の方が若い数字なので、その若い数字の方が順位は上になるようにするには、どのような関数を使えばいいのでしょうか。(上記の説明でご理解戴けるでしょうか?) 当方、エクセル関数を始めたばかりですので、なるべく解りやすくご教授をお願いします。

  • エクセルでの順位づけ

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

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

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

  • 順位付け

       A  B  C  D  E 1  A  6  5  2  3  2  B  3  4  1  1 3  C  9  5  3  5 4  D  6  4  2  1 5  D  0  4  0  -4 A列、チ-ム名 B列、勝点 C列試合数 D列、勝数 E列、得失点差 このようなシ-トがある場合、別のセルに1位~5位までの順位付けする関数を教えてください。 尚、勝点が同点場合は得失点差を考慮します。

  • エクセルで同率の順位の人が表示されない

    得点表を元に順位(RANK関数)を出し名前順の表にして、 その順位表を元にVLOOKUP関数で順位順の表を作ってます。 この場合、順位順の表では同順位の人がいた場合、同順位2人目以降の人の名前が表示されません(#N/Aと表示されます) 同位の人も名前と得点をそのまま表示させたいのですが、何か方法は有りませんか? 現在↓ 1位 Aさん 10点 2位 Bさん  9点 3位  #N/A  #N/A 4位 Dさん  8点     ・     ・ となります。それを 1位 Aさん 10点 2位 Bさん  9点 3位 Cさん  9点 4位 Dさん  8点 としたいです。 左の順位表記は書きこんでいるだけなので変化しません。もちろん順位に連動して変化してほしいですが、このままでも構いません。 Aさん・Bさんの各セルに=VLOOKUP(Q5,$U$4:$V$21,2,FALSE)のように設定しています。 ずいぶん前に本を見ながら設定したもので、理屈は忘れてます・・エクセル2000です。

  • エクセル 一連のデータを任意の範囲で順位付けしたい

    エクセルで、一つの列に並べられたデータを、任意の範囲で順位付けがしたいです。 具体的に説明します。 下記の表のように、A列に任意の文字、B列に数字があります。 A列   B列 AAA   15 AAA   19 BBB   3 BBB   8 BBB   9 BBB   4 BBB   1 DDD   20 DDD   21 DDD   19 この中で、A列の文字が同じものについて、B列の数字の順位をC列に表現したいです。理想の結果としては、下記の表になります。 ランク関数を使えばよいのは分かりますが、任意の範囲を指定する方法が分からなく、かつデータ量が膨大(10000行程度)であるため、悩んでいます。よろしくお願いします! A列   B列   C列 AAA   15   2 AAA   19   1 BBB   3    4 BBB   8     2 BBB   9     1 BBB   4     3 BBB   1     5 DDD   20   2 DDD   21   1 DDD   19   3

  • Rank付けについて

    エクセルでRank付け(順位)を考えています。 Rank関数で処理しようと考えたのですが,A列のコード番号が一定ではないため、処理に困っています。場合によってはマクロも考えています. どなたかアドバイス頂けないでしょうか。 A列にコード番号,B列に数値,C列に順位を入れます. 例えば、A2~A4まで1、A5~A6まで2とあり,A2~A4とA5~A6にはそれぞれおなじ数値が入ります。A列コードは3行分だったり2行分だったりと不規則に下に続いていきます。ただし,まとまたコード番号で固まっています. そのA列の同じコード番号全てに対して、B列の値を元にC列に順位を入力したいのです. コード    数値     順位 1       10       3 1       14       1 1       12       2 2       10       2 2       40       1 5       18       3 5       12       2 5       10       1 5       20       4

  • エクセル関数VLOOKUPで教えてください。 

    エクセル関数VLOOKUPで教えてください。  シ-ト1にA列から学籍番号・B列に氏名・C列に点数(数値)を記入してあります。 シ-ト2に順位表を作成しA列にLARGE関数を使用してシ-ト1から点数降順(昇順)に表示しました。シ-ト2のB列に学籍番号 C列に氏名 をVLOOKUP関数でシ-ト1から抽出したいのですが、点数が同点の場合に当該複数名を表示せず単一名になってしまいます。VBA・マクロを使用せずに関数のみで同一点数獲得者の氏名を個別個々に表示させる方法を教えてください。

  • エクセルRANK関数の同率順位を別表に抽出する時

    お世話になります。 エクセル2003を利用しています。初心者なので教えていただきたく存じます。 以下文面のようにランキング表を作りました。 RANK関数を利用してランキングを出し、順位表にTOP5(重複していても)まで出したいと思っています。 A列にA店~Z店までの名前(A店という名前は仮です)が入っており、 B列に上から結果数字がランダムに入力がされており、 C列にRANK関数を使って順位がその結果の横に数字として反映されています。 B列の順位の数字が大体1~20程度までの数字が記入されており、C列のRANK関数の結果が当然ですが重複して順位が表示されている状態です。 別表を作成して1~5位のランキング表を作り、A列に入っている店名とを表示させたいと思っております。 1位と2位は単独であったので店名はINDEXとMATCH関数を使ってきれいに抽出できたのですが、 3位以下は重複しているようで#N/Aと表示されてしまいます。 表示の仕方として「あいうえお順(A~Zの若い順)」で表示できればと思っております。 無知で恐縮なのですが、情報不足の点等あればご指摘いただきたく存じます。 お詳しい方、ご教授宜しくお願い致します。