- ベストアンサー
エクセル関数で販売店毎の売り上げ金額を求める方法
- エクセル関数を使って、販売店毎の売り上げ金額を求める方法を教えてください。
- エクセルファイルには複数の行があり、販売店とコード、売り上げ金額のデータが入っています。しかし、コードが重複しており、金額を合計したいです。
- 求めたい結果は、販売店ごとに金額を合計した表です。お手数ですが、合計金額を求める関数の使用例も教えてください。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! 一例です。 Sheet1のデータをSheet2に集計するようにしてみました。 ↓の画像で説明すると Sheet1に作業用の列を2列設けています。 作業列D2セルは =A2&B2 E2セルは =IF(COUNTIF($D$2:D2,D2)=1,ROW(),"") として、D2・E2セルを範囲指定し、E2セルのフィルハンドルでオートフィルで下へずぃ~~~!っとコピーします。 そして、Sheet2のA2セルは =IF(COUNT(Sheet1!$E:$E)<ROW(A1),"",INDEX(Sheet1!A:A,SMALL(Sheet1!$E:$E,ROW(A1)))) として隣のB2セルまでコピー C2セルに =IF(COUNTBLANK(A2:B2),"",SUMIF(Sheet1!D:D,A2&B2,Sheet1!C:C)) という数式をいれ、最後にA2~C2セルを範囲指定し、C2セルのフィルハンドルで下へコピーすると 画像のような感じになります。 以上、参考になればよいのですが 他に良い方法があれば読み流してくださいね。m(__)m
その他の回答 (6)
- KURUMITO
- ベストアンサー率42% (1835/4283)
販売店ごとでコードごとに関数で並べ、しかもそれらの並びはいつも一定したものでない場合には意外と面倒ですね。次のようにしてはどうでしょう。 すべてのデータはシート1のA,B,C列の2行目から下方に有るとしてE列およびF列は作業列とします。 E2セルには次の式を入力します。 =A2&B2 F2セルには次の式を入力します。 =IF(A2="","",IF(COUNTIF(E$2:E2,E2)=1,IF(COUNTIF(A$2:A2,A2)=1,INT(MAX(F$1:F1))+1,INDEX(F$1:F1,MATCH(A2,A:A,0))+(COUNTIF(F$1:F1,">="&INDEX(F$1:F1,MATCH(A2,A:A,0)))-COUNTIF(F$1:F1,">="&INDEX(F$1:F1,MATCH(A2,A:A,0))+1))/1000),"")) E2およびF2セルを選択してそれらの式を下方にオートフィルドラッグします。 お求めの表を別のシートに作るとしてA1セルからC1セルにはシート1と同じ項目名を入力します。 A2セルには次の式を入力してC2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(ROW(A1)>COUNT(Sheet1!$F:$F),"",IF(COLUMN(A1)<=2,INDEX(Sheet1!$A:$B,MATCH(SMALL(Sheet1!$F:$F,ROW(A1)),Sheet1!$F:$F,0),COLUMN(A1)),IF(COLUMN(A1)=3,SUMIF(Sheet1!$E:$E,$A2&$B2,Sheet1!$C:$C),""))) これでシート1に新たにデータが入力されても即座に表が対応します。
お礼
KURUMITOさんありがとうございます!!! 教えていただいた数式でも早速チャレンジしてみようと思います!!^^
- MackyNo1
- ベストアンサー率53% (1521/2850)
参考までに 私の提示した数式は基本的に配列数式ですので表示データ数が少ない場合は簡便な方法ですが、数式入力数が多くなると再計算に時間がかかるなど、実用性に問題があります。 この場合は、「ツール」「オプション」の計算方法タブで計算方法を「手動」にしておき、データを確認したい時のみF9キーを押して再計算させるようにします。 一方、補助列にCOUNTIF関数などの数式を多数の行にデータ数分だけ入力する場合は、メモリーの消費量が多くなり、エクセルがフリーズするなどの問題が発生します。 このような場合は、数式で処理するのではなく、ピボットテーブルで集計されることをお勧めします。 たとえば「データ」「ピボットテーブルと・・・」からピボットテーブルウィザードを起動し、行フィールドにA列とB列の項目名、データフィールドに売上金額をドラッグしてみてください。
お礼
MackyNo1さんいろいろとありがとうございます!!!(*>▽<)
- MackyNo1
- ベストアンサー率53% (1521/2850)
以下のような数式で重複のないA列とB列のデータとその集計値を表示することができます。 E2セルに以下の式を入力し、右方向に1つ下方向に適当数オートフィルします(数式だけで処理すると表示するデータが多い場合は動きが重くなりますので運用に工夫が必要です)。 =INDEX(A:A,SMALL(INDEX((MATCH($A$2:$A$8000&$B$2:$B$8000,$A$2:$A$8000&$B$2:$B$8000,)<>ROW($A$2:$A$8000)-1)*1000+ROW($A$2:$A$8000),),ROW(A1)))&"" G2セルには、エクセル2007をご使用なら、計算負荷が少ないSUMIFS関数を使います(2003以前のバージョンならSUMPRODUCT関数を使うことになります)。 重複のないA列とB列の組み合わせを、計算負荷が大きい数式を使用せずに表示させるなら、フィルタオプションの設定を利用します。 エクセル2007ならデータタブの「詳細設定」で(2003なら「データ」「フィルタ」「フィルタオプションの設定」)、リスト範囲にA列とB列の範囲を指定し「重複するレコードは無視する」にチェックを入れてOKし、このデータを別シートなどに貼り付けてSUMIFS関数などで集計します。 #エクセルのバージョンによって使用できる関数や機能だけでなく、操作法も違いますので、質問の際には必ずバージョンを明記するようにしましょう。
お礼
MackyNo1さん回答ありがとうございます。 そうですよね…基本的な記述が漏れておりました。バージョンは2003を使用しています。 失礼しました&助言ありがとうございます!!m(_"_)m
- kmetu
- ベストアンサー率41% (562/1346)
> 再問なのですが…コードが不規則でE列に入力できない場合はどのようにしたら良いでしょうか? 以下のページを参考にして重複データを整理してください http://editors-blog.hakenjob.com/archives/50040256.html A列B列をリスト範囲にしてD列E列を抽出範囲にすると一括でデータを入力できます。
お礼
kmetuさんありがとうございます!!^^
- kmetu
- ベストアンサー率41% (562/1346)
D列に販売店、E列にコードを入力するとして =SUMPRODUCT((A1:A8=D1)*(B1:B8=E1)*(C1:C8)) でいかがでしょう
お礼
kmetuさん早速の回答ありがとうございます!!! 再問なのですが…コードが不規則でE列に入力できない場合はどのようにしたら良いでしょうか?
お礼
tom04さんありがとうございます!!! 教えていただいた内容で問題解決できそうなのでやってみます(p≧∀≦q)〃