[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数シートのデータを一つのシートに集計する際、シート名を見出しにつけたい』(kenj)
Excelは2003です。
よろしくお願いします。
複数のシート(11月1日、11月2日、11月3日、11月4日)にそれぞれ
ID 名前 値段 個数 売上 ←見出し行
01 りんご 100円 5個 500円
02 みかん 50円 10個 500円
このようなデータがはいっています。
データ件数は可変です。
これを一つの新規シートに集計するコードは
http://www.moug.net/tech/exvba/0040062.html
Sub Sample()
Dim sWS As Worksheet 'データシート(コピー元) Dim dWS As Worksheet '集約用シート(コピー先)
Set dWS = Worksheets("AllData")
'集約用シートの2行目以降を削除 dWS.UsedRange.Offset(1, 0).Clear
'各シートの2行目以降のデータを、集約用シートの末尾にコピー For Each sWS In Worksheets If sWS.Name <> dWS.Name Then With sWS.UsedRange
'コピー元シートにデータが1件以上ある場合 If .Rows.Count > 1 Then .Offset(1, 0).Resize(.Rows.Count - 1).Copy _ Destination:=dWS.Cells(Rows.Count, 1). _ End(xlUp).Offset(1, 0) End If
End With End If Next sWS
'集計用シートをA列で並べ替え dWS.UsedRange.Sort Key1:=Range("A1"), Header:=xlYes End Sub
これを参考に作れました。
ただ、今回はどの各行のデータがどのシートのデータなのか明らかにする必要があり、
下記イメージのような集計の仕方をしたいと思っています。
11月1日←シート名
ID 名前 値段 個数 売上 ←見出し行
01 りんご 100円 5個 500円
02 みかん 50円 10個 500円
11月2日←シート名
ID 名前 値段 個数 売上 ←見出し行
01 りんご 100円 5個 500円
02 みかん 50円 10個 500円
11月3日←シート名
ID 名前 値段 個数 売上 ←見出し行
01 りんご 100円 5個 500円
02 みかん 50円 10個 500円
03 いちご 300円 1個 300円
11月4日←シート名
ID 名前 値段 個数 売上 ←見出し行
01 みかん 50円 10個 500円
このようにシート名をつけてその次の行から見出し、データをコピー
最後の行までいったら2回改行して、シート名をつけて〜といった
処理を行いたいと思っています。
上のソースでOffsetをつかってセルを移動しながらコピーを行っているみたいですが、
このあたりへの理解が浅く、シート名を取得してもどうやって思ったとおりの位置のセルにシート名を代入するのか
わからず困っています。
Dim sWS As Worksheet 'データシート(コピー元) Dim dWS As Worksheet '集約用シート(コピー先)
Set dWS = Worksheets.Add() dWS.Name = "AllData" For Each sWS In Worksheets If sWS.Name <> dWS.Name And sWS.Name <> "マクロ" Then With sWS.UsedRange
'コピー元シートにデータが1件以上ある場合 If .Rows.Count > 2 Then .Offset(1, 0).Resize(.Rows.Count - 1).Copy _ Destination:=dWS.Cells(Rows.Count, 1). _ End(xlUp).Offset(1, 0) ActiveCell.Value = sWS.Name End If
End With End If Next sWS
試しに作ってみたのはほとんど変更を加えてないこのコードです。 シート名を記入するようにしていますが試しに走らせて見たところ、
1行目には一番最後のシート名 2行目以降はデータのみで見だしが入らない状態です。
Sub pileUp() Dim sWS As Worksheet 'データシート(コピー元) Dim dWS As Worksheet '集約用シート(コピー先) Dim cellToPaste As Range
On Error Resume Next Set dWS = Worksheets("AllData") If Err.Number <> 0 Then Set dWS = Worksheets.Add() dWS.Name = "AllData" End If On Error GoTo 0
'集約用シートを先行クリア dWS.UsedRange.Clear
For Each sWS In Worksheets If sWS.Name <> dWS.Name And sWS.Name <> "マクロ" Then With sWS.UsedRange 'コピー元シートにデータが1件以上ある場合 If .Rows.Count > 1 Then Set cellToPaste = dWS.Cells(Rows.Count, 1).End(xlUp). _ Offset(IIf(IsEmpty(dWS.Range("A1")), 1, 3), 0) .Copy Destination:=cellToPaste cellToPaste.Offset(-1) = sWS.Name
End If End With End If Next
End Sub
(半平太) 2013/11/08(金) 16:33
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.