Excel VBA 閉じている複数のブックのデータを集計用のブックに集める

スポンサーリンク
スポンサーリンク

閉じている複数のブックのデータを1つのブックに集める方法

例えば、
複数店舗があり、各店舗の売上データがエクセルファイルで
あつめられ、それを一つのブックにまとめて集計したい場合など
に使えると思います。

各エクセルファイルのデータ形式は同じで
A1セルから始まっていること
各エクセルファイルと集計用ファイルを
1つのフォルダー内におくことを前提にします。

ここでは、集計用フォルダーの中に、
集計用のブック 集計.xlsmのマクロファイル
A店売上ブック データA.xlsxのファイル
B店売上ブック データB.xlsxのファイル
C店売上ブック データC.xlsxのファイル
があることを仮定してコードを記述しました。

実行すると、集計ブックに
データA.xlsxシート
データB.xlsxシート
データC.xlsxシート
が追加され、各ブックのデータが転記されます。

複数ブックのデータを集計ブックに転記するコード

Sub 集計()
  Application.ScreenUpdating = False
Dim mytable As Workbook
Dim myrange As Range
Dim mybook As Workbook
Dim mybookname As Variant
Dim mypath As String
Set mytable = Workbooks("集計Book.xlsm")
  mypath = ThisWorkbook.Path & "¥"
For Each mybookname In Array("データA.xlsx", "データB.xlsx", "データC.xlsx")
  mytable.Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = mybookname
Set mybook = Workbooks.Open(mypath & mybookname)
Set myrange = mybook.Worksheets(1).Range("A1").CurrentRegion
  myrange.Copy mytable.Sheets(mybookname).Range("A1")
  mybook.Close
Next
  Application.ScreenUpdating = True
End Sub

コードの解説

2行目はApplication.ScreenUpdating = Falseで
高速化のために画面の更新を止めています。


3行目は集計Bookを格納するmytable変数を宣言しています。


4行目は各店の売上データ範囲を格納する
myrange変数を宣言しています。


5行目は各店の売上データがあるブックを格納する
mybook変数を宣言しています。


6行目は各店売上データブックのブック名を格納する
mybookname変数を宣言しています。


7行目は各店売上データブックがあるフォルダーのパス名を保存する
mypath変数を宣言しています。


8行目は変数mytableに集計用のブック「集計Book.xlsm」を代入しています。
ブック名は実際に使用するブック名に変更してください。
拡張子はマクロが含まれるブックなのでXlsmにしてください。


9行目はmypath変数にThisWorkbook.Path &”¥”で売上データがある
フォルダーのパスを代入しています。


10行目はFor Each(フォアイーチ)ステートメントで繰り返し処理の始まりです。
mybookname変数にArray(アレー)関数を使って各店売上のブックを配列に格納し
繰り返し処理の中で順番にmybookname変数にブック名を格納します。
使うときは、実際のブック名に変更してください。
繰り返し処理についてはこちらをご覧ください。


11行目は集計用のブックにAdd(アド)メソッドで売上ブック名の
シートを追加を追加しています。
シートの追加についてはこちらをご覧下さい。


12行目はmybook変数に Workbooks.Openメソッドで
配列に格納した売上データブックを開いて格納しています。


13行目はmyrange変数に上記で開いたブックをA1セルを基準に
CurrentRegion(カレントリージオン)プロパティでデータ範囲を選択しています。


14行目は上記のデータ範囲をCopy(コピー)メソッドでコピーして
11行目で追加した集計用ブックのシートのA1セルに貼り付けています。


15行目は開いた売上データブックをClose(クローズ)メソッドで閉じています。


16行目はここまで、配列に格納されたブックの数分の回数繰り返します。


17行目はApplication.ScreenUpdating = Trueで、高速化のため
止めていた画面の更新を再開しています。


これで、複数のブックのデータを集計用のブックにシート別に集めることが
できます。集計用ブック内でシート別にわかれているデータを
集計用シートにまとめる方法はこちらをご覧ください。
ありがとうございました。

スポンサーリンク
スポンサーリンク

フォローする

スポンサーリンク
スポンサーリンク