- ベストアンサー
エクセルで集計表を作成する方法
- エクセルで集計元表から商品毎に集計表を作成する方法を解説します。
- 集計元表から商品名、日付、支店を判別し、セルに売上数を収める手段についてのヒントをお伝えします。
- セル関数やVBAなど、様々な方法で集計表を作成することができます。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
アクセスで処理する エクセルの操作で処理 エクセル関数で処理 エクセルVBAで処理 エクセルなどピボットテーブル などあるだろう。 ーー 体裁について色々事情や好みがあろうが ピボットでやるのが一番簡単。 ーー 合計 / 売上数 商品名 支店名 合計 商品A 支店1 8 支店2 3 商品A 合計 11 商品B 支店1 9 支店2 3 支店4 3 商品B 合計 15 総計 26 のようなの。 ーー (メニューの)データー集計でやると 商品名 支店名 日付 売上数 総計 26 商品A 合計 11 商品A 支店1 2011/8/1 6 商品A 支店1 2011/8/5 2 商品A 支店2 2011/8/1 3 商品B 合計 15 商品B 支店1 2011/8/1 9 商品B 支店2 2011/8/1 1 商品B 支店2 2011/8/2 2 商品B 支店4 2011/8/3 3 これも手軽で速い。 ーーー どちらかというと、関数より商品+支店+日付でソートしておいて、VBAで表を作るほうが考えやすい。 ーー 関数なら 商品A|8/1|8/2|8/3|8/4|8/5|合計| 支店1| 支店2| 合計 | の「それぞれの商品版の見出し」に当たるものを手作業で作っておいて、計数を該当セルに、3条件の加算で関数(SUMPRODUCTかSUMIFS)で出せば良い。(<=エクセルバージョンを書いて質問のこと) しかし上記見出しに当たるものを作るのが、商品数や支店数が多いと多少手間がかかる。 計数の無い支店を行から省くなどだとさらに面倒。(VBAなら出現したものだけ表示が普通に出来る) ーー こんなとこに質問でまる投げしないで、アクセスにデータがあるなら、クエリやレポートを勉強したら。
その他の回答 (6)
- KURUMITO
- ベストアンサー率42% (1835/4283)
商品名や支店名、日付までも自動で表示させるようにするためには、シート1の集計元表にはいくつかの作業列を設けることが必要です。 元の集計表がA1セルに商品名、B1セルに支店名、C1セルに日付、D1セルに売上数の項目名が有り、各データがそれぞれの下行にあるとします。その際にA列が第一優先での並べ替えがあり、B列が第二優先での並び替えが行われているものとします。 そこでE2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A2="","",IF(COUNTIF(A$2:A2,A2)=1,MAX(E$1:E1)+1,INDEX(E$1:E1,MATCH(A2,A:A,0)))) F2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(B2="","",IF(COUNTIF(B$2:B2,B2)=1,MAX(F$1:F1)+1,INDEX(F$1:F1,MATCH(B2,B:B,0)))) G2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(E2="","",IF(COUNTIF(A$2:A2,A2)=1,MAX(G$1:G1)+5,IF(AND(E2=E1,F2<>F1),MAX(G$1:G1)+1,""))) H2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(G2="","",IF(COUNTIF(G:G,G2-1)=0,G2-2,"")) I2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A2="","",A2&B2&C2) そこでお求めの商品名ごとの集計ですがシート2に作成するとしてA3セルには次の式を入力して下方にオートフィルドラッグします。 =IF(OR(ROW(A3)<3,ROW(A3)>MAX(Sheet1!$G:$G)+1),"",IF(COUNTIF(Sheet1!$H:$H,ROW(A3))>0,"集計表",IF(OFFSET(A3,-1,0)="集計表","",IF(COUNTIF(Sheet1!$G:$G,ROW(A3))>0,INDEX(Sheet1!$B:$B,MATCH(ROW(A3),Sheet1!$G:$G,0)),IF(OR(OFFSET(A3,2,0)="集計表",ROW(A3)=MAX(Sheet1!$G:$G)+1),"合計",""))))) B3セルには次の式を入力して右横方向にオートフィルドラッグしたのちに下方向にもオートフィルドラッグします。 =IF(ROW(A3)<3,"",IF(AND($A3="集計表",COLUMN(A3)=1),INDEX(Sheet1!$A:$A,MATCH(ROW(A3),Sheet1!$H:$H,0)),IF(AND(OFFSET($A3,-1,0)="集計表",COLUMN(A3)<MAX(Sheet1!$C:$C)-MIN(Sheet1!$C:$C)+2),TEXT(MIN(Sheet1!$C:$C)+COLUMN(A3)-1,"m/dd"),IF(AND(OFFSET($A3,-1,0)="集計表",COLUMN(A3)=MAX(Sheet1!$C:$C)-MIN(Sheet1!$C:$C)+2),"合計",IF(OR(AND($A3="合計",B$4="合計"),AND(B$4="合計",COUNTIF(Sheet1!$G:$G,ROW(A3))>0)),SUM(A3:$B3),IF(ISERROR(IF(COUNTIF(Sheet1!$G:$G,ROW(A3))>0,INDEX(Sheet1!$D:$D,MATCH(INDEX(Sheet1!$A:$A,MATCH(ROW(A3),Sheet1!$H:$H,1))&$A3&DATEVALUE(INDEX($4:$4,COLUMN(A3)+1)),Sheet1!$I:$I,0)))),"",IF(COUNTIF(Sheet1!$G:$G,ROW(A3))>0,INDEX(Sheet1!$D:$D,MATCH(INDEX(Sheet1!$A:$A,MATCH(ROW(A3),Sheet1!$H:$H,1))&$A3&DATEVALUE(INDEX($4:$4,COLUMN(A3)+1)),Sheet1!$I:$I,0)),IF(AND($A3="合計",COLUMN(A3)<MAX(Sheet1!$C:$C)-MIN(Sheet1!$C:$C)+2),SUM(INDEX(B:B,INDEX(Sheet1!$G:$G,MATCH(ROW(A3),Sheet1!$H:$H,1))):OFFSET(B3,-1,0)),"")))))))) これでお望みの表がシート2に表示されます。
- nana76
- ベストアンサー率28% (168/583)
#2・3です。 度々申し訳ありません。 集計元表と、集計表をゴチャゴチャに見てました。 やっぱりピボットテーブルで大丈夫そうですね。 集計表のデザインに関しては、ピボットで集計してからあとで修正を入れても良いですし、数が知りたいだけならピボットを作ればそれでOKかと・・・。 セル関数でも計算できますけど、計算式がゴチャゴチャ複数のセルに入るよりは、スッキリして良いのかなぁ?という気はします。 「行」→商品名・支店名 「列」→日付 「データ」→売上数(合計にして下さい) これでOKだと思います。
- keithin
- ベストアンサー率66% (5278/7941)
>Accessからエクスポートした表があります わざわざエクスポートせず,アクセスのDBから直接データを吸い上げてエクセルのピボットテーブルレポートを作成します。 例: http://www.microsoft.com/japan/office/previous/xp/suminaka/access/sousa2002/2/sousa2_2_10_honbun.htm #ご利用のエクセルのバージョンが不明ですが,たいがいどのバージョンでも同じように操作します ピボットテーブルレポートは,ページに商品,列に支店,行に日付,データ(Σ)に数値を配置します。 聞けば出来ると思ってたけど「実は手抜きで説明してませんでした」があって出来ないときは,具体的なデータやヤリタイ事を添えて改めて質問を投稿し直してください。
- nana76
- ベストアンサー率28% (168/583)
ピボットテーブルで出来ないですか?
- tony3303
- ベストアンサー率27% (348/1274)
セルの元票の位置を書きたいセル内に入れればそこに自動的に同じ数字か入りますが、同じシート内でないと出来ないと思います。