注目キーワード
  1. SE
  2. 副業
  3. 投資
  4. プログラミング
  5. Excel

【Excel】複数ブックを1つに集約する方法【VBA】

  • 2021-09-26
  • 2021-12-04
  • Excel

こんにちは、モリゾーです。

今回は、複数のブックから1つのブックにシートをコピーするマクロを作成します。

※本記事ではExcel VBAのサンプルコードを載せています。
 Excel VBAの実行方法については以下の別記事を参考にしてください。

関連記事

こんにちは、モリゾーです。 Microsoft Excel(以下、Excel)をプログラムから自動的に操作してくれる「Excel VBA」について、本記事でその始め方をご紹介していきたいと思います。 日々の業[…]

いろんなファイルに散らばっている情報を1つのファイルにまとめたい!
同じレイアウトのシートを1つにまとめてデータ分析のために使いたい!など

Excel資料を普段使っている人なら思うことも多いかと思います。

<イメージ>

そんな方々のために、マクロを使用してボタンひとつで実現できるようなExcelマクロのご紹介をします。

実行例

本記事で紹介するExcelマクロの実行例を説明していきます。

自分のしたいことのイメージと合っているかご確認ください。

集約したいブックを指定のフォルダへ配置

以下の例では「ドキュメント」フォルダ配下に”test”というフォルダを作成して、そこに配置しています。

フォルダに格納したファイルの中身は以下のように作成しています。

<Book1.xlsx>

<Book2.xlsx>

VBAを実行

上記にてブックを格納したフォルダを、VBAを記述したExcel内のシートで指定し実行します。同時に集約した後のExcelのファイルパスも指定します。

(VBAの実行は「開発」タブの「マクロの実行」から実行するか、Alt+F11キーから開かれるエディタ上でF5キーを押下してください。)

実行結果の確認

実行した結果が以下のようになります。

VBAを記述したExcelで指定した出力ファイルのパスに新しくファイルが作成されます。

作成されたファイルは以下のように、集約したいブックのシートがまとめられていることが確認できます。

サンプルコード

それではサンプルコードを以下に載せますのでご参考ください。

Sub ブック集約()
    
    Dim sFileName As String
    Dim sWB As Workbook
    Dim dWB As Workbook
    Dim dSheetCount As Long
    Dim WORK_FOLDER As String   '作業フォルダのフォルダパス
    Dim OUTPUT_FILE As String   '出力ファイルのファイルパス
    Dim s, i As Long

    WORK_FOLDER = Range("C2").Value  '※末尾に"\"をつけてください
    OUTPUT_FILE = Range("C3").Value
    
    Application.ScreenUpdating = False
    
    '作業フォルダ内にあるブックを取得
    sFileName = Dir(WORK_FOLDER & "*.xlsx")
    
    'フォルダ内にブックがなければ終了
    If sFileName = "" Then Exit Sub
    
    '集約用ブックを作成
    Set dWB = Workbooks.Add
    
    '集約用ブック作成時のシート数を取得
    dSheetCount = dWB.Worksheets.Count
    
    Application.DisplayAlerts = False
    
    s = 0
    
    Do
        'コピー元のブックを開く
        Set sWB = Workbooks.Open(Filename:=WORK_FOLDER & sFileName)

        'コピー元のインデックス1のシートを集約用ブックにコピー
        sWB.Worksheets(1).Copy After:=dWB.Worksheets(dSheetCount + s)
        
        'シート名をインクリメントの番号に変更
        activeSheet.Name = s
        
        s = s + 1
        
        'コピー元ファイルを閉じる
        sWB.Close
        
        '次のブックのファイル名を取得
        sFileName = Dir()
    Loop While sFileName <> ""
        
    '集約用ブック作成時にあったシートを削除
    For i = dSheetCount To 1 Step -1
        dWB.Worksheets(i).Delete
    Next i
    
    '集約用ブックを保存して閉じる
    dWB.SaveAs Filename:=OUTPUT_FILE
    dWB.Close
    
    Application.DisplayAlerts = True
    Application.ScreenUpdating = False

End Sub

まとめ

以上、Excel VBAを使用して複数のブックを1つのブックに集約する方法を紹介しました。

本記事で紹介したサンプルコードをもとに、ブック内の全シートを集約したり、集約後のブックを1つのシートに集約したりいろいろな作業のベースになるのではないでしょうか。

サンプルコードの中には少し難しい記述があったかもしれませんが、今後紹介していく記事や参考書を活用して理解を深めていただけたら幸いです。

最新情報をチェックしよう!