- ベストアンサー
エクセルデータを人別・かつ区分別に、件数と成績の集計したい
- エクセルデータを人別・かつ区分別に、件数と成績の集計をします。データシートが複数あるため、ピボットテーブルでは難しいです。
- 名前別に複数のデータシートがあり、Aさん、Bさん、Cさんのカテゴリ(A, B, C)ごとの件数と成績を合計したいです。
- Aさん:カの合計・件数と成績、Aさん:キの合計・件数と成績、Aさん:クの合計・件数と成績、Bさん:カの合計・件数と成績、Bさん:キの合計・件数と成績、Bさん:クの合計・件数と成績、Cさん:カの合計・件数と成績、Cさん:キの合計・件数と成績、Cさん:クの合計・件数と成績を集計します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>また、データシートは名前別に複数あります 質問の例からすると、そのように見えないが シートさん Aさん カ 1 10 Aさん カ 1 20 Aさん キ 1 10 シートBさん Bさん キ 1 5 Bさん ク 1 20 シートCさん Cさん カ 1 10 Cさん ク 1 10 ・・ ということですかか。 例としては上記のように書くべきと思う。 ーーーーーーーーーーー それなら 上記(私が書いた形)から質問者の書いたイメージの単一シートに 集積し(行的に継ぎ足し)、集積したシートでピボットテーブルを使うのが良いと思う。 データの1シートに集積するのは関数では複雑になるので、VBAを使う。 ーー データなしの集積シート1つ作っておく。 標準モジュールに下記を貼り付ける。 Sub test01() Dim sh As Worksheet Dim ws As Worksheet Set sh = Worksheets("集積") For Each ws In ActiveWorkbook.Worksheets MsgBox ws.Name 'この行削除しても良い。確認用 If ws.Name <> "集積" Then d = ws.Range("a65536").End(xlUp).Row ws.Range(ws.Cells(1, "A"), ws.Cells(d, "D")).Copy sh.Activate sh.Range("a65536").End(xlUp).Offset(1, 0).Select ActiveSheet.Paste End If Next End Sub (A)ws.Cells(d, "D")).CopyのDはD列までしかデータが無い場合の例。 最右列を考えて、一番列が多いシートの実情にあわせてDを書き換えてください。 (B)ws.Range(ws.Cells(1, "A"), ws.Cells(d, "D")).Copy 第1行ー第2行は見出しで、集積するのは不要の場合 ws.Range(ws.Cells(3, "A"), ws.Cells(d, "D")).Copy としてください。 各シートのそこかしこの行にコメントや、合計のようなものが ある場合は、すっきりうまくいかない。手作業で、集積シート上で 行削除できる量かかどうか。 集積シートには、シートタブの左からの見た目の順序に継ぎ足していくので、望みの順にして、上記VBAを実行するとよい。
お礼
ご丁寧な説明、ありがとうございました