EXCEL複数グループ内で欠損値を除いて順位を振る

このQ&Aのポイント
  • EXCELで複数のグループ内で順位を表示させるようにしたいのですが、欠損値を除く方法が分かりません。
  • 現在は一度並べ替えをして、順位を振っていますが、順位を振るのは複数回必要で手間がかかっています。
  • マクロ対応でなければ、関数で並び替えをせずに順位を振ることはできないでしょうか。Excelのバージョンは2003です。
回答を見る
  • ベストアンサー

EXCEL複数グループ内で欠損値を除いて順位を振る

EXCELで複数のグループ内で順位を表示させるようにしたいのですが、 間に欠損値「-」があります。 SUMPRODUCT関数を用いて、グループ内順位を振る方法はわかったのですが 欠損値を除く方法が分かりません。 欠損値の場合は順位ではなく「-」を入力したいです。 A列 B列 C列 D列 E列 グループ1 グループ2 スコア グループ1での順位 グループ2での順位 関東 東京 40 1 1 関東 東京 30 3 2 関東 東京 20 5 3 関東 埼玉 35 2 1 関東 埼玉 25 4 2 関東 埼玉 - - - ・  ・ ・  ・ いまは一度並べ替えをして、順位を降っています。 ですが、順位を振るのはひとつではないため、何度も並べ替えが必要に なっています。 関数で並び替えをせずに順位を振ることはできませんでしょうか。 マクロ対応でなければ無理でしょうか。 (Excelのバージョンは2003です) よろしくお願いします。

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

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

【作成例】 D2: =IF(C2="","",IF(C2="-","-",SUMPRODUCT(($A$2:$A$20=A2)*($C$2:$C$20<>"-")*($C$2:$C$20>C2))+1)) E2:バリエーション =IF(C2="","",IF(C2="-","-",SUMPRODUCT(($B$2:$B$20=B2)*ISNUMBER($C$2:$C$20)*($C$2:$C$20>C2))+1)) あなたのSUMPRODUCTの式の,単なるバリエーションじゃないかな?と思いますが。 ご自分では一体どんな式を書いたのか,ご相談で最初から情報提供してみるともっと話が早かったようには思います。

akibell
質問者

お礼

こちらの式を提示せず、すみませんでした。 SUMPRODUCTを使いこなせていなかったのが原因ですね。 IF文も挑戦してみたのですが、「($C$2:$C$20<>"-")」を間に入れるという 発想がありませんでした。 こちらの関数ですっきり解決です。 ありがとうございました。

その他の回答 (2)

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

並び替えがA列とB列で行われている限りにおいては次のようにすればよいでしょう。 1行目は項目名としてD2セルには次の式を入力してE2セルまで横にドラッグコピーしたのちに下方にもドラッグコピーします。 配列数式などではありませんのでデータ数が多くなっても計算速度が遅くなるなどのことは起こりません。勿論C列にデータが無いあるいは-の記号が有っても対応できます。 =IF(COUNT($C2)=0,"",RANK($C2,INDEX($C:$C,MATCH(A2,A:A,0)):INDEX($C:$C,MATCH(A2,A:A,0)+COUNTIF(A:A,A2)-1)))

akibell
質問者

お礼

SUMPRODUCT関数を使用しなくても、グループ毎の順位をつけることができるのですね。 計算速度も遅くなく対応できました。 No2さんの方が先に回答していただいたためベストアンサーとしましたが、 こちらも私的にはベストアンサーです。 ありがとうございました。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

スコアの-を0で置き換えしては。

akibell
質問者

お礼

早速のご回答、ありがとうございました。 スコアが0のものもあるため、0への置換えはできないのですが、-1などに 置き換えることは可能ですね。 やはり発想が足りないと痛感しています。 ありがとうございました。

関連するQ&A

  • EXCELで複数のグループ内での順位を表示させたい。

    EXCELで複数のグループ内で順位を表示させるようにしたいのですが、 どうすれば良いかわからず困っています。 たとえば、こんなデータがあるとします。 (A列)(B列) 名前  スコア あああ 10 あああ 20 あああ 30 あああ 40 いいい 5 いいい 20 いいい 60 いいい 65 いいい 70 いいい 80 いいい 90  ・   ・  ・   ・  ・   ・ こようなデータを名前別でスコアの降順で順位をつけたいのです。 (A列)(B列) (C列) 名前  スコア 順位 あああ 10  4 あああ 20  3 あああ 30  2 あああ 40  1 いいい 5  7 いいい 20  6 いいい 60  5 いいい 65  4 いいい 70  3 いいい 80  2 いいい 90  1  ・   ・  ・   ・  ・   ・ 名前の種類の数もかなりあります。 このようにグループ内で順位を表示させるにはどのようにしたらいいでしょうか? EXCELは初心者なため、どなたかお詳しい方、どうか宜しくお願い致します。

  • EXCEL2007でグループ別の順位を昇順で

    こんばんは 下記のD列の順位を関数で計算する方法を教えてください。 C列の点数をもとにA列のグループ別の順位を昇順でつけたいのです。 宜しくお願い致します。 Aグループ  B氏名  C点数 D順位 1        あ    10    1 1        い    20    2 1         う    30    3 1        え    40    4 1        お    50    5 2        か    50    4 2        き    40    3 2        く     30    2 2        え    20    1 2        お    80    5 3        え    20    2 3        い    90    5 3        う    10     1 3        あ    50    3 3        お    60    4

  • グループに順位をつけ、降順に並べ替えたい

    セルA1からE5までを1つのグループとして、D1に当該月の売り上げ総額があります。これが40グループあって(2グループ目はA6からE10、D6に売上総額という形)、これをグループ内の項目・数字を固定したまま売上総額の順位による並べ替えをしたいのです。何かいい方法はあるでしょうか?

  • sumproductを使った順位計算について

    sumproductを使った順位計算について質問です。 こういう感じのExcel表があります↓      A      B      C     D 1   日付    名前    点数   順位 2    3   5月1日  あああ    11     3 4   5月1日  あああ    31     1 5   5月1日  あああ    20     2 6 7   5月1日  いいい    20     2 8   5月1日  いいい    22     1 9   5月1日  いいい    15     3 10 11   5月2日  ううう    無効     1    12   5月2日  ううう     15     3 13   5月2日  ううう     50     2 名前ごとの順位を自動で計算したいため、色々調べて =IF(A3="","",SUMPRODUCT(($B$3:$B$13=B3)*($C$3:$C$13>C3))+1) という関数を使いました。(上記はD3セルの値) 「あああ」と「いいい」は、それで正確な順位が出ますが、「ううう」のように C列に文字列が入ると文字列が1位になってしまいます。 isnontextなど使って自分でイロイロやってみましたが、上手くいきません。 そもそもsumproductを使ったのが間違いなのかもしれません。 どなたか良い解決方法をご存じでしたら教えて頂ければ嬉しいです。m(_ _)m ちなみにExcel2010で、C列には「無効」以外の文字や、「-」などの記号が入ることもあります。

  • エクセル グループ化したまま並べ替えがしたい

    エクセルで行の商品リスト 行1 2 3 4 5 6並べ替えで 1 2グループ 3 4 グループ 5 6グループ で並べ替えをしました。 グループ化は行12を選択してではなく1のみを選択して下の行2とグループ化しました。 12を選択してグループ化をすると3が含まれてしまうので上記のようにグループ化しました。 すでにまちがいでしょうか? 列には商品名 コード 納期 等々 グループをとじて(+)全列行を選択して並べ替え(納期列を優先)をしたところ 各行で納期順にはなったのですが 123456がばらばらにグループ化されていました。 商品順 コード順 納期順 いづれの並び替えでもグループ化が固定されるようにしたいです。 どうすればよいでしょうか? 数が多いのでできるだけリストの内容をいらわない方向で(1と2を同じ行にまとめてしまうとかはしたくないです)

  • ゴルフコンペの順位の件

    Excel2007で、ゴルフコンペの順位のつけ方で教えてください。 F列にグロススコア、G列にハンデ、H列にネットスコアがあって、I列に   =IF(H2="","",RANK(H2,$H$2:$H$100,1)) を入れて順位をつけますが、このH列のネットスコアが同順位の場合は、 G列のハンデ上位者を順位の上に持ってきたいのですが、どのような関数を使えば良いか 教えて頂きたいと思います。 私、初心者レベルですのよろしくお願いします。

  • 順位を1,2,3位を赤字にするには!

    いつもお世話になっております。 下記のようなスコア結果での順位を自動的に”1”、”2”、”3”、”4”と付与(表示)出来る関数を教えて頂き大変助かりました。    A 列 B C D E F E 1行      田中 鈴木 山本  管  佐藤  木下 2行 12月10日  40  45  33  48  休み  38 3行 12月12日  33  休み  40  休み  33 35 4行 12月14日  31  休み  55  休み  24  35 5行 12月16日  24   38  40  休み 57  22 6行 参加日数  4   2  4  1   3 4 7行 平均スコア 32.0 41.5 42.0 48.0 38.0 32.5 8行 参加率 100% 50%  100% 25% 75%  100% 9行  順位   1  --   4 --   3   2 =IF(B8<0.6,"--",SUMPRODUCT(($B$8:$G$8>0.59)*($B$7:$G$7<B7))+1) 上記の関数式で順位は自動的に表示されましたが、そこで強欲にも さらに1,2,3位を同時に赤字にする関数は有りませんか?又は1,2,3位の セルを赤色にする関数はないでしょうか?誠に強欲な質問で申し訳ありません。よろしくお願いいたします。                          ー 以上 -      

  • 順位を自動的に表示する方法を教えてください。

    いつもお世話になっております。 下記のようなスコア結果の表で順位欄に順位を自動的に”1”、”2”、”3”、”4”と付与(表示)出来る関数を教えてください。 但し、条件として参加率60%以上(59%以下を除く) の中で平均スコアの低い順から”1”、”2”、”3”、”4”と表示し 参加率59%以下はすべて”0”又は”-”と表示する関数を教えてください。よろしくお願いいたします。 申し訳ありませんエクセルの表がうまく添付されませんので 下記の表示で許してください。因みにエクセルの表を添付する方法も 教えていただければ有難いです。よろしくお願いいたします。    田中 鈴木 山本 管  佐藤  木下 12月10日 40  45  33  48  休み  38 12月12日 33  休み  40 休み 33 35 12月14日 31  休み  55  休み 24  35 12月16日 24   38  40 休み 57  22 参加日数 4  2  4  1   3 4 平均スコア 32.0 41.5 42.0 48.0 38.0 32.5 参加率 100% 50% 100% 25% 75% 100% 順位 ?? ?? ?? ?? ?? ??                 ー 以上 ー

  • EXCEL関数での順位のつけ方について

    今度レースの集計をすることになりました。 定められた時間の耐久レースで、タイムはありません。     A     B    C     D 1 チーム名 周回数 ゴール順 順位 2 ●●    30    1 3 ○○    31    4 4 △△    31    3 5 ■■    29    5 6 ★★    30    2 順位を決める条件は、 (1)周回数が多い順 (2)同一周回数の場合はゴール順 です。 周回数が違えばRANK関数で簡単にできるのですが、 同一周回数の時にゴール順を参照する方法がわかりません。 できれば、D列に関数を入れて順位を表示したいと考えています。 関数で解決できない場合はあきらめて手作業で行いますので、 VBAでの解決方法は結構です。 よろしくお願いします。

  • 【EXCEL】こんなことはできるでしょうか?

    エクセルで次のようなデータがあるとします。 勝星 3 5 26 8 9 これを大きい順に順位付けすると 勝星  順位 3    5 5    4 26    1 8    3 9    2 となりますが、ここで質問です 簡単な関数などを使って、順位の列の結果を 簡単に作ることはできるでしょうか。 よろしくお願いします。

専門家に質問してみよう