< スポンサーリンク >

VBAで同じフォルダ内のブックのデータを一つのブックに集計する

月毎にフォルダを作り、その中に日毎の日報用のファイルを保存しています。

フォルダ

 

日報のファイルを月報のファイルに下図のように集計します。

日報月報

 

ファイルシステムオブジェクトを使って、月報.xlsxの標準モジュールに下記のように書きます。

Sub shuukei()

    '自分のブックのディレクトリPathの変数

    Dim DirPath As String

    '自分のワークブック用変数

    Dim acWb As Workbook

    '自分のワークブックの名前用変数

    Dim acWbName As String

    '自分のワークシート用変数

    Dim acWs As Worksheet

    'ファイルシステムオブジェクトの変数

    Dim FileSysObj As Object

    'フォルダ内のブックの変数

    Dim FileObj As Object

    'アクティブなブック

    Dim acFileObj As Object

    'アクティブなブックの名前

    Dim acFileObjName As String

    '順番に開いていくワークブック変数

    Dim wb As Workbook

    'wbのシート変数

    Dim ws As Worksheet

    '行

    Dim row As Integer

 

    '自分のブックをセットする

    Set acWb = ThisWorkbook

    '自分のブックの集計用ワークシートをセットする

    Set acWs = acWb.Sheets("Sheet1")

    '自分のブックのディレクトリを変数に代入

    DirPath = acWb.Path

    '自分のブック名を変数に代入

    acWbName = acWb.Name

 

    'ファイルシステムオブジェクトのセット

    Set FileSysObj = CreateObject("Scripting.FileSystemObject")

    'フォルダ内のファイルのセット

    Set FileObj = FileSysObj.GetFolder(DirPath).Files

 

    row = 1

 

    For Each acFileObj In FileObj

        acFileObjName = acFileObj.Name

 

        'ブック名が自分のブック名と同じ時は何もしない

        If InStr(acFileObjName, acWbName) Then

        Else

            Workbooks.Open DirPath & "\" & acFileObjName

            Set wb = Workbooks(acFileObjName)

            Set ws = wb.Worksheets("Sheet1")

            acWs.Range("A" & row).Value = ws.Range("A1").Value

            acWs.Range("B" & row).Value = ws.Range("A2").Value

            row = row + 1

            wb.Close

        End If

    Next

 

    Set acFileObj = Nothing

    Set FileObj = Nothing

    Set FileSysObj = Nothing

 

    acWs.Range("A" & row).Value = "計"

    acWs.Range("B" & row).Formula = "=sum(B1:B" & row - 1 & ")"

 

End Sub

 

これを実行すると集計.xlsmに集計されます。

< スポンサーリンク >



サブコンテンツ

このページの先頭へ