- ベストアンサー
エクセルで月間で売れた商品(販売個数)ベスト10を出したい
エクセルで月間で売れた商品(販売個数)ベスト10を出したいのですが、毎日エクセルで売れた商品を集計しています。 その集計データをもとに売れた商品の販売個数でランク付け(トップ10)を出す方法を教えてください。よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
回答No2です。後から次々と新たな注文が出てくる形はできるだけ避けてください。もう一度はじめから考え直す必要があるからです。 ところでご質問の件ですが次のようにすることでその月にダブって商品が入力されている場合でも対応することができます。 シートの条件はNo2と同じですが作業列や式については次のようにします。 シート1では作業列を増やして対応します。目障りでしたらのちほど列を非表示にすればよいでしょう。 E2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(OR(A2="",Sheet2!A$1=""),"",IF(MONTH(A2)=MONTH(Sheet2!A$1),B2,"")) F2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(OR(E2="",COUNTIF(E$2:E2,E2)>1),"",IF(MONTH(A2)=MONTH(Sheet2!A$1),SUMIF(E:E,E2,C:C),"")) G2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(F2="","",IF(RANK(F2,F:F)>=10,"",RANK(F2,F:F)+COUNTIF(F$2:F2,F2)*0.001)) シート2ではA2セルに次の式を入力してC2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(OR(ROW(A1)>COUNT(Sheet1!$G:$G),COLUMN(A1)>3),"",INDEX(Sheet1!$A:$F,MATCH(SMALL(Sheet1!$G:$G,ROW(A1)),Sheet1!$G:$G,0),IF(COLUMN(A1)<=2,COLUMN(A1),6)))
その他の回答 (4)
- tom04
- ベストアンサー率49% (2537/5117)
No.3です! たびたびごめんなさい。 前回の方法では販売個数が同じ商品があった場合一番上の行の商品しか拾い出しできませんので、 もう一度お邪魔しました。 ↓の画像のようにSheet1にもう一列作業列を追加してください。 E2セルに =IF(D2="","",COUNTIF($D$2:$D$1000,">"&D2)+COUNTIF($D$2:D2,D2)) としてオートフィルで下へコピーします。 (これで累計が同数の場合は上側の商品が上位のランクになります) そして、Sheet2のB3セルに =IF(COUNT(Sheet1!$E$2:$F$1000)<ROW(A1),"",INDEX(Sheet1!$B$2:$B$1000,MATCH(ROW(A1),Sheet1!$E$2:$E$1000,0))) C3セルは =IF(B3="","",INDEX(Sheet1!$D$2:$D$1000,MATCH(B3,Sheet1!$B$2:$B$1000,0))) としてオートフィルで下へコピーしてみてください。 これで同順位の場合でも対応できると思います。 どうも何度も失礼しました。m(__)m
お礼
ありがとうございます。 関数の奥深さに感心し、解決できたことに深く感謝いたします。 わかりやすい画像まで入れていただきありがとうございました。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 横からお邪魔します。 参考になるかどうか判りませんが・・・ ↓の画像のようにSheet1のデータをSheet2にまとめてみました。 尚、Sheet1のデータは1か月分だとしています。 Sheet1の作業列D2セルに =IF(B2="","",IF(COUNTIF($B$2:B2,B2)=1,SUMIF($B$2:$B$1000,B2,$C$2:$C$1000),"")) としてオートフィルでずぃ~~~!っと下へコピーするか、フィルハンドルの(+)マークでダブルクリックします。 そして、Sheet2のB3セルは =IF(COUNT(Sheet1!$D$2:$D$1000)<ROW(A1),"",INDEX(Sheet1!$B$2:$B$1000,MATCH(LARGE(Sheet1!$D$2:$D$1000,ROW(A1)),Sheet1!$D$2:$D$1000,0))) C3セルは =IF(B3="","",INDEX(Sheet1!$D$2:$D$1000,MATCH(B3,Sheet1!$B$2:$B$1000,0))) として、B3・C3セルを範囲指定し、C3セルのフィルハンドルで下へコピーすると 画像のような感じになります。 尚、数式はSheet1の1000行目まで対応できるようにしていますが、 データ量によって範囲指定の領域はアレンジしてみてください。 以上、長々と書きましたが参考になれば幸いです。 的外れなら読み流してくださいね。m(__)m
- KURUMITO
- ベストアンサー率42% (1835/4283)
シート1には元のデータがあり、ある月間でのベストテンをシート2に表示させる方法です。 シート1ではA1セルに日付、B1セルに商品名、C1セルに販売個数と項目名がありそれぞれのデータが2行目から下方に入力されているとします。なお、日付は2010/2/1のように入力されているとします。 そこで作業列を作って対応することにします。 E2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(OR(A2="",Sheet2!A$1=""),"",IF(MONTH(A2)=MONTH(Sheet2!A$1),C2,"")) また、F2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(E2="","",IF(RANK(E2,E:E)>=10,"",RANK(E2,E:E)+COUNTIF(E:E,E2)*0.01)) 次にシート2に移ってA1セルには2010/1/1のように入力してセルの表示形式ではユーザー定義で m"月" のようにしてセルの表示は1月のように表示させます。この月が表示させたい月ということになります。 A2セルには日付、B2セルには商品名、C2セルには販売個数と項目名を入力します。 A3セルには次の式を入力してC3セルまでオートフィルドラッグしたのちに下方向にもオートフィルドラッグします。 =IF(ROW(A1)>COUNT(Sheet1!$F:$F),"",INDEX(Sheet1!$A:$D,MATCH(SMALL(Sheet1!$F:$F,ROW(A1)),Sheet1!$F:$F,0),COLUMN(A1))) なお、A3セルから下方のセルの表示形式は日付にします。 これで同じランクの販売個数のデータも表示されますので、10行以上のデータも並ぶこともあるでしょう。 一度、こちらの提案通りに操作を試験してから応用してください。
お礼
ありがとうございます。 すごい!数式が全然理解できませんが、欲を言えば、シート2にシート1で同じ商品が別の日でも売れた場合、シート2でその商品名を複数行ではなく、一行で合計個数を出す方法はありますでしょうか?欲張りでしょうか?
- mt2008
- ベストアンサー率52% (885/1701)
お礼
>後から次々と新たな注文が出てくる形はできるだけ避けてください。もう一度はじめから考え直す必要があるからです。 ごもっともです。申し訳ございません。 とんでもないわがままな質問にも丁寧な回答をいただき感謝しております。 検証に時間がかかり、連絡が遅れました。やりたかったことがばっちり解決できて胸がすっとしております。