エクセルでRank付け(順位)の方法とは?
- エクセルでのRank付け(順位)方法についてアドバイスをお願いします。
- エクセルのRank関数を使って順位を付けたいのですが、コード番号が不規則に並んでいるため、どう処理すればいいか悩んでいます。
- A列のコード番号に基づいて、B列の値を元に順位を計算してC列に入力したいです。アドバイスをお願いします。
- ベストアンサー
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
- doragonok
- お礼率45% (14/31)
- その他(プログラミング・開発)
- 回答数3
- ありがとう数3
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
こんにちは。 まず、確認したい点があります。 ご提示の例ですと、「コード」が 1 及び 2 のデータの順位は、 「数値」が大きい順(数値が一番大きいものが1位) になっていますが、「コード」が 5 のデータの順位は、 「数値」が小さい順(数値が一番小さいものが1位) になっているようですが、実際にはどちらでしょうか? 次に、本来の用件ですが、他の回答者さんとは別解となりますが、 『配列数式』を使用した方法を掲載させて頂きます。 ※下記の参考サイトの方法を使用させて頂きました。 ※暫定として、「数値」が大きい順に順位を付けています。 【参考サイト】 Mr.Big~小技集・配列数式~ http://hp.vector.co.jp/authors/VA014071/tips/hairetsu.html ・このページのサンプル例「テストの結果」部分の方法を応用 させて頂きました。 ■シートレイアウト例&数式例 [A] [B] [C] [1] コード 数値 順位 [2] 1 10 (数式) [3] 1 14 (数式) [4] 1 12 (数式) [5] 2 10 (数式) [6] 2 40 (数式) [7] 5 18 (数式) [8] 5 12 (数式) [9] 5 10 (数式) [10] 5 20 (数式) [11] 5 12 (数式) : : : : <C列の設定数式> ・C2セル =IF(AND(ISNUMBER($A2),ISNUMBER($B2)), SUM(IF($A$2:$A$101=$A2, IF($B$2:$B$101>$B2,1,0),0))+1,"") 注)上記の数式入力時は、最後に [Ctrl]+[Shift]+[Enter] のキー入力を行って下さい。 ※入力後は数式が { } で囲まれて表示されます。 ・上記の数式は表示の都合上、複数行で記述しています。 実際の数式入力の際は、1行で記述するか、適当な箇所で [Alt]+[Enter] により改行して下さい。 ・上記の数式をセルにコピー&ペーストする際は、行先頭の [全角スペース]を削除してから行って下さい。 ・数式内のセルアドレスは、ご使用のワークシートの構成に 合わせて適せん変更して下さい。 ⇒上記式ではデータ件数を100件分(100行分)としています。 ・C列のC3セル以降のセルには、C2セルを選択後、 オートフィル操作等により下方向に数式をコピーして下さい。 ※「数値」が小さい順に順位を付ける場合は以下の数式に 変更して下さい。 =IF(AND(ISNUMBER($A2),ISNUMBER($B2)), SUM(IF($A$2:$A$101=$A2, IF($B$2:$B$101<$B2,1,0),0))+1,"") ■結果例 上記の設定で順位を付けた場合、以下のような結果になります。 [A] [B] [C] [1] コード 数値 順位 [2] 1 10 3 [3] 1 14 1 [4] 1 12 2 [5] 2 10 2 [6] 2 40 1 [7] 5 18 2 [8] 5 12 3 [9] 5 10 5 [10] 5 20 1 [11] 5 12 3 <結果の補足> ・「コード」が 5 のデータについては、「数値」=12 が 2件 あるため、 同率 3位 が 2件となり、結果 4位が無くなり、次の順位は 5位と なっています。 以上です。
その他の回答 (2)
- hananoppo
- ベストアンサー率46% (109/235)
C2セルに次のような数式を入力してください。 =RANK(B2,OFFSET(B$1,MATCH(A2,A$2:A$1000,0),,COUNTIF(A$2:A$1000,A2))) ただし、これは行1000までデータがある場合です。「A$1000」は実際の行数に合わせて変更してください。大きめでもよいです。 後は、C2セルをC3セル以降にコピーすればよいです。
- mtaka2
- ベストアンサー率73% (867/1179)
内部計算用の列を一列追加してもよいのなら、以下の数式で可能です。 D列に以下の数式を入れます。 D2を「=B2+A2*1000000」に、D3以降も同様 (この「1000000」という数値には深い意味はありませんが、B列(数値)の範囲よりも大きい数値を指定する必要があります。) C列に、以下の数式を入れます。 C2を「=RANK(D2,D$2:D$10)-COUNTIF(A$2:A$10,">"&A2)」に、C3以降も同様 以上で、「順位(C列)」は、降順(大きいほど高い)の順位が入ります。 これで計算できる原理は以下の通りです。 D列には、数値に対して、A列(コード番号)に非常に大きい数値を掛けた物を足していますので、 D列の「RANK(D2,D$2:D$10)」を計算すると、コードの大きいものから順番に、コード毎の順位が入ります。 (コード=5の4行が1位~4位に、コード=2の2行が5位~6位に、コード=1の3行が7位~9位になる) 「COUNTIF(A$2:A$10,">"&A2)」では、順位を調べたい行のコードよりも大きいコードを持つ行の行数を数えています。 ここで、RANKの結果からCOUNTIFの結果を引くと、コード単位での順位になります。 コード 数値 順位 D列 RANK COUNTIF 1 10 3 1000010 9 6 1 14 1 1000014 7 6 1 12 2 1000012 8 6 2 10 2 2000010 6 4 2 40 1 2000040 5 4 5 18 2 5000018 2 0 5 12 3 5000012 3 0 5 10 4 5000010 4 0 5 20 1 5000020 1 0 もし、順番を昇順(小さいほど順位が高い)ようにしたいのでしたら、 「=RANK(D2,D$2:D$10,1)-COUNTIF(A$2:A$10,"<"&A2)」 のように、COUNTIFの数え方も変えてください。
お礼
アドバイスありがとうございます。 ランク付けの他に、COUNTIFといった別のランキング方法までアドバイス頂き 、ぜひ活用してみたいと思います。 RANKの結果からCOUNTIFの結果を引くと、コード単位での順位になることには驚きです!!
関連するQ&A
- オートフィルタ後のランク付け
オートフィルタをかけた後のリストにランク付けしたいのですが、うまくいきません。 例えば”行1”にオートフィルタをかけて、”あ”を抽出した後に、”列C”に1、2、3、…とランクをつけるものです。 どなたか教えていただけないでしょうか。 A B C 1 名前 得点 2 あ 60 3 い 80 4 あ 80 5 い 100 6 あ 100
- 締切済み
- オフィス系ソフト
- VBA(マクロ)について
エクセルのマクロを使って下記のように実行を考えています。 A列のコード番号が一定ではないため、処理に困っています。 どなたかアドバイス頂けないでしょうか。 詳細についてです。A列にコード番号があり、B列に数値があります。 例えば、A列の1~3行目まで100とあり、4~5行目まで400と1~3行目と4~5行目の数値はおなじです。3行分だったり2行分だったりと不規則に下に続いていきます。 そのA列の同じコード番号全てに対して、B列の値を合計してC列に合計値を入力したいのです。 C列の合計値入力箇所は、A列の1~3行目までだとするとC列1行目に合計値がくるようにしたいのです。 ちなみに行数は10万桁ほどあります。
- ベストアンサー
- Visual Basic
- rankは配列数式で使えないのでしょうか
たとえばA列とB列(各列3行までデータがあるとする)の和の順位をC列に返したいとき、C1に {=RANK($A1+$B1,$A$1:$A$3+$B$1:$B$3)} と入れましたが計算してくれませんでした。1列和の列を用意せずにダイレクトに順位を返すことはできないでしょうか?アイディアがあればお聞かせ願いたく存じます。
- ベストアンサー
- Excel(エクセル)
- Excel RANK関数 条件に一致する数値の順位
EXCELのRANK関数で条件に一致する数値の順位を出したいのですが、そのような関数は出来ますか? A列 B列 C列(RANK) A 10 1 B 9 1 A 8 2 B 7 2 A 6 3 B 5 3 A列とB 列からC列を求めたいのですが、できますか?
- ベストアンサー
- オフィス系ソフト
- 限定範囲内の数値に対するRANK関数について
エクセルについての質問です。 A B C D 1 11 22 33 2 10 20 30 3 15 25 36 4 12 24 36 5 18 27 A列にRANK関数を使い「順位を入れたい」のです。 ただし以下のような決まりがあります。 (1)D列にて値が33以上の数値を対象とし、 (2)B列の数値を降順にランク付け 結果としては以下のようになる数式を目指していますがそのような関数はできますでしょうか。 A B C D 1 3 11 22 33 2 10 20 30 3 1 15 25 36 4 2 12 24 36 5 18 27 対象がD列だけの数式でしたら 例えばA1のセルに =IF(OR(D1<33,D1=""),"",RANK(D1,$D$1:$D$5,FALSE)) と入力し、他のA列へコピーすれば良いと思うのですがさらにその結果を対象とした数式がどうにもよくわかりません。 お分かりの方いらっしゃいましたら教えて頂けますでしょうか。
- ベストアンサー
- オフィス系ソフト
- カウントについて
エクセルをつかってカウント処理を考えています. どなたかアドバイス頂けないでしょうか。 下記のような表があります. 例えば、セルA1~3まで100とあり、セルA4~5まで400とセルA1~3とセルA4~5の数値はおなじです。3行分だったり2行分だったりと不規則コードが下に続いていきますが,まとまった数値になります. そのA列の同じコード番号全てに対して、B列にカウント数を入力したいのです。 B列のカウント数入力箇所は、セルA1~3までだとするとセルB3に最大値のカウント数がくるようにしたいのです。 コード カウント数 100 100 100 3 200 200 2 500 500 500 500 4
- ベストアンサー
- その他(プログラミング・開発)
- よみがな順でランク付け(RANK関数のようなもの)を行いたい
EXCELでRANK関数というのがありますが RANK関数では、数値しか扱えません RANK関数のように、読み仮名順に順番を付けることはできないでしょうか? A B 1 やまだ 2 いいだ 3 つぼい 4 たなか 5 おだ 「B1」セルに「=RANK(A1,$A$1:$A$5,1)」と入れB2~B5まで コピーするようなイメージです。 (B1セルではなくても良いですし、途中に計算過程を入れる セルを挟んでも問題ありません) 読み仮名を一文字づつ分解し、文字コードに変換(CODE関数)→ 連結(&)→数字に変換(VALUE関数)という事をやり、その結果で RANK付けという作業をしたのですが、数字が大きすぎになってしまい 10文字目くらいまでしか有効になりませんでした。 何か良いアイディアなどお持ちの方がいらっしゃいましたら ご教授ください、お願いします。
- ベストアンサー
- オフィス系ソフト
- Excelのrankがおかしい
少々面倒なのですが、どうしても解決できないのでお教えください。 A B C D 1:結果1 結果2 合計 順位 2:8 8 16 1 3:8.275 7.325 15.6 2 4:7.125 8.475 15.6 3←どうして? 5:6 6 12 4 Cの列は「=SUM(A2,B2)」のようにしています。 Dの列は「=RANK(C2,C$2:C$5,0)」のようにしています。 順位は1、2、2、4となって欲しいのですが、上のように1、2、3、4となってしまいます。 A3、B3、A4、B4の値を変えると1、2、2、4になるのですが、上の値だとどうしてもなりません。 面倒ですが、どうしても解決できないので、お教えください。
- ベストアンサー
- オフィス系ソフト
- RANK関数で順位付けする方法
お世話になります。Oracle初心者です。RANK関数による順位付けについて悩み、検索してもわからず困っております。 次のような表tbがあります。 数値,順 70 10 30 この「順」のカラムに順位を付けて 数値,順 70,3 10,1 30,2 としようとしています。SELECTなら SELECT 数値,rank() over (order by 数値 desc) from tb; が成功します。これでupdateする場合、 (rank() over (order by 数値 desc))をした値を update tb set 順= とすればよいと思うのですが、うまくいきません。 PL/SQLを使わず、SQLでRANK関数を使って順位付けするにはどのようにしたらよろしいでしょうか。 勉強不足だと思い、申し訳なく思います。何卒よろしくお願いいたします。
- ベストアンサー
- Oracle
- エクセルで順位付けする方法を教えて下さい
エクセルで順位付けする方法を教えて下さい。 (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 非常に煩雑な関数になりそうですが、お力をお貸しいただきたく宜しくお願いいたします。
- 締切済み
- オフィス系ソフト
お礼
返答ありがとうございます。 質問について、ランク付けの順位は「数値」が大きい順です。 参考サイトとかも、アクセスしてみましたが色々な方法があるのですね。 桁が50万桁くらいあるのですが、いくつか分割して関数で処理を進めていきたいと思います。 本当に勉強になりました。自力でこれくらいの関数をかけるように努力していきたいともいます。