- 締切済み
集計表を作成するマクロについて
「1日」のシート A B C D E 1 車両番号 出発場所 到着場所 商品コード 数量 2 1 東京 大阪 L 10 3 2 北海道 東京 M 5 4 3 東京 北海道 L 17 5 4 福岡 東京 N 8 「2日」のシート A B C D E 1 車両番号 出発場所 到着場所 商品コード 数量 2 1 大阪 東京 K 8 3 2 東京 愛知 L 7 4 3 福岡 大阪 N 17 5 4 北海道 千葉 N 13 上記のように「車両番号」「出発場所」「到着場所」「商品コード」「数量」の情報が入ったシートが日別に1枚ずつあり、月間で28~31枚が1つのファイルに入っています。 このファイルで、新しいシートを追加して、日別の車両情報の一覧を作成したいのですが、どのようにしたらよいのか教えていただけませんか? 以下の条件で作成したいと思います。 1.「A1」から「E1」を新しいシートの「A1」から「E1」に貼り付ける。 2.シートの「車両番号」に数字が入っている行をそのままコピーして、新しいシートに貼り付けていく。その際に、コピー元のシート番号が入ればありがたい。(無くても可) 3.日別の車両情報をスペースは開けずに下に続けて貼り付けていく。 4.月ごとに日数が異なるので、車両情報が投入されているシートのみを貼り付ける対象としたい。 以上です。 次のように表示されるようになると嬉しいです。 A B C D E F 1 車両番号 出発場所 到着場所 商品コード 数量 参照シート名 2 1 東京 大阪 L 10 1日 3 2 北海道 東京 M 5 1日 4 3 東京 北海道 L 17 1日 5 4 福岡 東京 N 8 1日 6 1 大阪 東京 K 8 2日 7 2 東京 愛知 L 7 2日 8 3 福岡 大阪 N 17 2日 9 4 北海道 千葉 N 13 2日 これが出来れば、手で「コピー・貼り付け」をしていくよりも入力ミスが少なくなりそうです。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- nattocurry
- ベストアンサー率31% (587/1853)
- ka_na_de
- ベストアンサー率56% (162/286)
お礼
下記のようなコードを入力して、何とか作成することができました。 右端に「参照シート名」を入れるところで苦戦しています。 --------------------------------------------------------------- Sub 集計表() Dim newSh As String Dim Sh As Worksheet, myFlag As Boolean newSh = "集計表" myFlag = False For Each Sh In ThisWorkbook.Worksheets If Sh.Name = newSh Then myFlag = True '----全データシートのデータをクリアし、先頭へ移動します Worksheets(newSh).Cells.ClearContents Worksheets(newSh).Move before:=Sheets(1) Exit For End If Next Sh '----全データシートを先頭へ追加します If myFlag = False Then ActiveWorkbook.Worksheets.Add(before:=Worksheets(1)).Name = newSh End If Worksheets(2).Select Rows("1:1").Select Application.CutCopyMode = False Selection.Copy Sheets("集計表").Select ActiveSheet.Paste Dim i As Integer Dim lRow As Long, lCol As Long, lRow2 As Long Application.ScreenUpdating = False '----列見出しをコピーします Worksheets(2).Range("1:1").Copy Worksheets(1).Range("A1") For i = 2 To Worksheets.Count With Worksheets(i) lRow = .Cells(Rows.Count, 1).End(xlUp).Row lCol = .Cells(1, Columns.Count).End(xlToLeft).Column '----シートのデータが2行以上の場合にコピーします If lRow >= 2 Then lRow2 = Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row + 1 .Activate .Range(Cells(2, 1), Cells(lRow, lCol)).Copy Worksheets(1).Cells(lRow2, 1) End If End With Next i Worksheets(1).Activate Range("A1").Select Application.ScreenUpdating = True End Sub