2018年3月3日土曜日

ブックの全シートをまとめるコード

こんにちは、Shigeです。
今回は、ブックに複数あるシートのデータを「まとめ」のシートにコピペするコードです。

  1. Sub Matome()
  2.   Dim i As Integer
  3.   Dim lRow As Long, lCol As Long, lRow2 As Long
  4.     Application.ScreenUpdating = False
  5.      '----全データシートの有無をチェックします
  6.     call sh_check
  7.     '----列見出しをコピーします
  8.     Worksheets(2).Range("1:1").Copy Worksheets(1).Range("A2")
  9.     For i = 2 To Worksheets.Count
  10.         With Worksheets(i)
  11.             lRow = .Cells(Rows.Count, 1).End(xlUp).Row
  12.             lCol = .Cells(1, Columns.Count).End(xlToLeft).Column
  13.             '----シートのデータが2行以上の場合にコピーします
  14.             If lRow >= 2 Then
  15.                 lRow2 = Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row + 1
  16.                 .Activate
  17.                 .Range(Cells(2, 1), Cells(lRow, lCol)).Copy Worksheets(1).Cells(lRow2, 1)
  18.             End If
  19.         End With
  20.     Next i
  21.     Worksheets(1).Activate
  22.     Application.ScreenUpdating = True
  23. End Sub
4行目と28行目のApplication.ScreenUpdatingはコピーするワークシートをアクティブにしてるので、処理を早くするために画面の表示を止めてるコードですね。他のでもよく使ってますので、前にも書いたかもしれませんね(;・∀・)

6行目で「まとめ」シートがブック内にあるかどうかをチェックしてます。(他のマクロで)
8行目はまとめる前のシートに見出しがある場合を想定してるので、必要なければ消してください。
10~20行目はsh_checkで「まとめ」シートを先頭のワークシートにしているので、ワークシートの2枚目から最後まで、ワークシートの行が2行以上の場合に「まとめ」シートにコピーをすることを繰り返します。
最後に「まとめ」シートのWorksheets(1)をアクティブにして完了ですね。
だいぶ前に作成したものなので、わざわざコピペするためにアクティブにしてたりしてますが、何十枚もシートがなければそんなに時間はかからないはずですのでこのままのっけました。
では、また。

0 件のコメント:

コメントを投稿

ブックの全シートをまとめるコード

こんにちは、Shigeです。 今回は、ブックに複数あるシートのデータを「まとめ」のシートにコピペするコードです。 Sub Matome()   Dim i As Integer   Dim lRow As Long, lCol As Long, lRow2 As Lo...