[[20250128135923]] 『複数条件で順位表示するには』(つむ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『複数条件で順位表示するには』(つむ)

お世話になっております。

実績資料を作成している中で、売上順位、前年比順位を出す必要があります。
順位の重複はなしで、以下データを順位付けする方法を教えてください。

●前年比順位の条件
1.売上があって、前年比がないものは上位に位置付ける
2.売上も前年比もないものは下位に位置付ける
3.順位の重複はなし、売上が0でも順位表示をする(順不同)

●売上順位の条件
1.売上が高いものから上位
2.順位の重複はなし、売上が0でも順位表示をする(順不同)

相手先CD 相手先名 売上合計  前年比
123456  東京   10,139,790 344%
123457  千葉   664,900 312%
123458  静岡   5,434,800  -
123459  青森   624,000 263%
123460  富山   213,300   -
123461  大阪   209,900   173%
123462  奈良   323,500 171%
123463  兵庫   0 -
123464  大分   0 -
123465  熊本   0 -
123466  栃木   0 -

表に作業列を設けることは可能です。
お手数をおかけしますが、ご教示いただけますと幸いです。
よろしくお願いいたします。

< 使用 Excel:Excel2021、使用 OS:Windows10 >


E列F列の正解をおしえてください
特に、静岡、富山、兵庫、大分、熊本、栃木の売上順位と前年比順位はどうなったら正解ですか?

    │    A    │    B     │     C      │    D    │    E     │     F      │
  1 │ 相手先CD │ 相手先名 │  売上合計  │  前年比 │ 売上順位 │ 前年比順位 │
  2 │   123456 │   東京   │ 10,139,790 │   344%  │          │            │
  3 │   123457 │   千葉   │    664,900 │   312%  │          │            │
  4 │   123458 │   静岡   │  5,434,800 │    -    │          │            │
  5 │   123459 │   青森   │    624,000 │   263%  │          │            │
  6 │   123460 │   富山   │    213,300 │    -    │          │            │
  7 │   123461 │   大阪   │    209,900 │   173%  │          │            │
  8 │   123462 │   奈良   │    323,500 │   171%  │          │            │
  9 │   123463 │   兵庫   │          0 │    -    │          │            │
 10 │   123464 │   大分   │          0 │    -    │          │            │
 11 │   123465 │   熊本   │          0 │    -    │          │            │
 12 │   123466 │   栃木   │          0 │    -    │          │            │
(とおりすがり) 2025/01/28(火) 15:14:04

コメントいただきましてありがとうございます。

下記のようにしたいと考えています。

   │    A    │    B     │     C      │    D    │    E     │     F      │
  1 │ 相手先CD │ 相手先名 │  売上合計  │  前年比 │ 売上順位 │ 前年比順位 │
  2 │   123456 │   東京   │ 10,139,790 │   344%  │1         │3           │
  3 │   123457 │   千葉   │    664,900 │   312%  │3        │4           │
  4 │   123458 │   静岡   │  5,434,800 │    -    │2         │1           │
  5 │   123459 │   青森   │    624,000 │   263%  │4         │5           │
  6 │   123460 │   富山   │    213,300 │    -    │6        │2           │
  7 │   123461 │   大阪   │    209,900 │   173%  │7         │6           │
  8 │   123462 │   奈良   │    323,500 │   171%  │5         │7           │
  9 │   123463 │   兵庫   │          0 │    -    │8         │8           │
 10 │   123464 │   大分   │          0 │    -    │9         │9           │
 11 │   123465 │   熊本   │          0 │    -    │10        │10          │
 12 │   123466 │   栃木   │          0 │    -    │11        │11          │
(つむ) 2025/01/28(火) 16:11:55

 コードを書く元気がないのできちんと考えてないです。

 1,C列を降順に並び替え
 2,E列に上から順番にインデックス振る
 3,C列が0以外の時、前年比を1000(あり得ない大きい%ならなんでも)-売上順位%とする(作業列でも配列に持たせてもお好みで)
 4,D列を降順に並び替えてインデックス振る
 5,A列を昇順に並び替えで戻す

 でいけそう。もっと効率いい方法ありそうですが
(i) 2025/01/29(水) 11:22:00

コメントありがとうございます。

できれば何かしらの関数を使って順位を表示したくて、
実績が変わったら自動的に順位変動するようにしたいと思っていますがそういった方法はありますでしょうか?
(つむ) 2025/01/29(水) 11:50:40


 売り上げの方は
 =LET(rng,C2:C12,serial,SEQUENCE(COUNTA(rng)),order,SORTBY(serial,RANK(rng,rng)),rank,SORTBY(serial,order),rank)
 で出来そう
 前年比は難しくて検討中。
(´・ω・`) 2025/01/29(水) 11:54:18

ありがとうございます!

ご教示いただいた式を入力したら#スピルとでてしまいました。
この表自体がテーブルになっているのですが、テーブルと併用ができないのでしょうか?

他の列に入力してみたらできました。
(つむ) 2025/01/29(水) 12:29:47


 テーブルってスピル使えないんですよね。
 作業列使っていいですか?ダメな場合、前年比の%は表示で%にしているか、実際%まで入力されているか教えてほしいです。

 作業列使っていいなら
 売上順位 = =IF([@売り上げ合計]=0,MAX(E$1:E1)+1,RANK.EQ([@売り上げ合計],[売り上げ合計]))
 作業列 = =IF([@前年比]="-",IF([@売り上げ合計]=0,0,1000-[@売上順位]),[@前年比])
 前年比順位 = =IF([@作業列]=0,MAX(G$1:G1)+1,RANK.EQ([@作業列],[作業列]))
(i) 2025/01/29(水) 12:56:35

 すみません、%は文字列でも計算できるんですね。
 上記の質問なかったことにしてください。
 ただ作業列がないと、RankEQだとうまくいかないから別の手法にしないとダメそうな感じ
(i) 2025/01/29(水) 13:08:35

G2=IF(IFERROR((D2*1>0)*0,C2)=0,C2,MAX(C:C)+C2)
H2==RANK(G2,G:G)
(mm) 2025/01/29(水) 14:13:54

コメントありがとうございます。

記載いただいた式では、条件の1つである「順位の重複はなし、売上が0でも順位表示をする(順不同)」ができませんでした…。

(´・ω・`)さんの式はテーブルでは無ければ条件通りにできました。
(つむ) 2025/01/29(水) 14:50:21


 名前の定義で、売上順位 とか適当な名前で以下の式を登録
 =LET(rng,テーブル1[売上合計],serial,SEQUENCE(COUNTA(rng)),order,SORTBY(serial,RANK(rng,rng)),rank,SORTBY(serial,order),rank)
 テーブル名は実際に合わせて下さい
 
 で、テーブル内の売上順位の列の数式は、
 =XLOOKUP([@相手先CD],[相手先CD],売上順位,"",0)
                   ↑
                 これは上記で定義した名前
 
 前年比順位がどうにもうまくいかないす
(´・ω・`) 2025/01/29(水) 15:19:22

 例えば
 G列に作業列を設けて、
 G2 =IF(AND(C2>0,D2="-"),C2+10^10,C2)
 下にコピー

 あとは
 E2 =RANK(C2,$C$2:$C$12,0)+COUNTIF($C$2:C2,C2)-1
 F2 =RANK(G2,$G$2:$G$12,0)+COUNTIF($G$2:G2,G2)-1
 それぞれ下にコピー

 ※前年比がないものは「-」が入力されている前提

(おさむ) 2025/01/29(水) 15:35:39


 売上順位
=XMATCH([@相手先CD],SORTBY([相手先CD],[売上合計],-1))
前年比順位
=XMATCH([@相手先CD],SORTBY([相手先CD],IF([前年比]="-",IF([売上合計]>0,10^9,-10^9),[前年比]),-1))

(んなっと) 2025/01/29(水) 15:43:00


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.