[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数条件で順位表示するには』(つむ)
お世話になっております。
実績資料を作成している中で、売上順位、前年比順位を出す必要があります。
順位の重複はなしで、以下データを順位付けする方法を教えてください。
●前年比順位の条件
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 >
│ 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
記載いただいた式では、条件の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.