• 締切済み

集計表を作成するマクロについて

「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日 これが出来れば、手で「コピー・貼り付け」をしていくよりも入力ミスが少なくなりそうです。 よろしくお願いします。

みんなの回答

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.2

やりたいことがきちんと整理されているので、あとはその通りにやれば良いだけですよ。 自分ではどこまでできて、どこが解らなくて困っているのかを、はっきりさせましょう。 たとえば、 1.「A1」から「E1」を新しいシートの「A1」から「E1」に貼り付ける。 なんていうのは、実際に手動でやってみて、それを「マクロの記録」すれば、コードは判ります。 このままだと、質問ではなく作成依頼になってしまいますよ。

donald1982
質問者

お礼

下記のようなコードを入力して、何とか作成することができました。 右端に「参照シート名」を入れるところで苦戦しています。 --------------------------------------------------------------- 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

すると、全ての回答が全文表示されます。
  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.1

下記のURLを参考にしてみてください。

参考URL:
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_data_matome.html
donald1982
質問者

お礼

大変参考になりました。 コードがいろいろあり、それぞれのコードの半分も理解していませんが、何とか形になりました。 あとは、出来あがった集計表の右端に参照シート名を入れるだけです。

すると、全ての回答が全文表示されます。

関連するQ&A