<目次>
(1) VBAで複数のブックの内容を集計する方法
(1-1) 構文
(1-2) サンプルプログラム
(1) VBAで複数のブックの内容を集計する方法
VBAで複数のブックに記載された内容を、1つのブックに集計する例をご紹介いたします。利用シーンとして、例えば「複数人で作業した結果をマージ」する際などに役に立つかも知れません。
例えば次のように複数のブックに分かれた別々の表があるとします(列のラインナップは同じ「商品ID」「品名」「金額」)。
(1-1) 構文
●フォルダ内のブックを順番にループ
(構文)
Dim objFSO As FileSystemObject Set objFSO = New FileSystemObject Dim fl As File For Each fl In objFSO.GetFolder([ファイルパス]).Files '# 各ブック毎に行う処理 Next
●ブックの基本操作(開く、保存、閉じる)
'# ブックを開く Set tmpBook = Workbooks.Open(fl) ‘# ブックに対して行う処理 ‘# (例)集計用のブックに転記など '# 保存してブックを閉じる tmpBook.Save tmpBook.Close
(1-2) サンプルプログラム
Public Sub MergeBooks() Dim objFSO As FileSystemObject Set objFSO = New FileSystemObject Dim wC As Worksheet: Set wC = ThisWorkbook.Worksheets("Control") Dim fl As File '# 集計対象のファイルのパスを記録する変数Inpathで、今回は"Control"シートの(2, 2)の値を使います Dim Inpath As String: Inpath = wC.Cells(2, 2).Value + "\" '# 各ブックを開く際に使う一時的なWorkbook変数 Dim tmpBook As Workbook '# 開いたブックの行をループする変数 Dim i1 As Integer '# 集計するブックで、何行目まで転記したか?を管理する値 Dim cursor As Integer: cursor = 5 '# 指定フォルダ(Inpath)内の各ブックを順番にループ For Each fl In objFSO.GetFolder(Inpath).Files '# ブックを開く Set tmpBook = Workbooks.Open(fl) '# 開いたブックの行を順番にループ(1行目はヘッダーのため、2行目から) For i1 = 2 To 20000 '# もし開いているブックのセル(i1,1)が空白ならForループを抜ける If tmpBook.ActiveSheet.Cells(i1, 1) = "" Then Exit For '# 開いたブックの「i1」行目の1~3列目(「商品ID」「品名」「金額」)を、集約するブックにコピー wC.Cells(cursor, 1) = tmpBook.ActiveSheet.Cells(i1, 1) wC.Cells(cursor, 2) = tmpBook.ActiveSheet.Cells(i1, 2) wC.Cells(cursor, 3) = tmpBook.ActiveSheet.Cells(i1, 3) '# 集約するブックの行番号をインクリメント cursor = cursor + 1 Next '# 保存してブックを閉じる tmpBook.Save tmpBook.Close Next End Sub
(操作動画)実際の操作イメージの動画をご紹介します。