Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

VBA

VBAで複数のブックの内容を集計する方法

投稿日:2021年5月13日 更新日:

<目次>

(1) VBAで複数のブックの内容を集計する方法
 (1-1) 構文
 (1-2) サンプルプログラム

(1) VBAで複数のブックの内容を集計する方法

VBAで複数のブックに記載された内容を、1つのブックに集計する例をご紹介いたします。利用シーンとして、例えば「複数人で作業した結果をマージ」する際などに役に立つかも知れません。

(イメージ)

例えば次のように複数のブックに分かれた別々の表があるとします(列のラインナップは同じ「商品ID」「品名」「金額」)。

(図111)

これを1つの表にまとめたいとします(次の図のイメージ)。
(図112)

(1-1) 構文

●フォルダ内のブックを順番にループ

ファイルシステムの操作(フォルダやファイルを開いたり)するためには「FileSystemObject」オブジェクトを使います。そして指定したフォルダ内にあるファイルを順番にループするためには「For Each」文を使います。

(構文)

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

(操作動画)実際の操作イメージの動画をご紹介します。

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-VBA

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

VBAでシート名をブックを手で開かずに取得してリネームする方法

<目次> (1) VBAでシート名をブックを手で開かずに取得してリネームする方法  (1-1) 構文  (1-2) サンプルプログラム  (1-3) 操作動画紹介・VBAダウンロード (1) VBAで …

VBAで「実行時エラー ‘429’:ActiveXコンポーネントはオブジェクトを生成できません」が出た時の対処記録

  <目次> (1) VBAで「実行時エラー ‘429’:ActiveXコンポーネントはオブジェクトを生成できません」が出た時の対処記録  (1-1) 発生状況・エラーメッセージ  (1-2 …

VBAで処理と処理の間に一定時間を空けて実行する方法

今回はVBAで処理と処理の間に一定時間を空けて実行する方法について、備忘も兼ねて記載します。 (0)目次&概説 (1) Application.wait (2) サンプルプログラムソース (3) サン …

VBAによる郵便番号の正規表現マッチ確認関数&置換関数の作成

  (0)目次&概説 (1) 正規表現とは (2) 正規表現はどのような場面で利用される? (3) VBAによる正規表現の簡易チェックツール  (3-1) 郵便番号を抽出したい  (3-2) …

VBAで画像を分類に応じて適切なフォルダに仕分けるプログラム

(0)目次&概説 (1) マクロ概要 (2) 使用方法 (3) アルゴリズム概要 (4) プログラム (1) マクロ概要 本マクロは画像ファイルを適切なフォルダに仕分けるためのマクロです。前提として、 …

  • English (United States)
  • 日本語
Top