Excel VBA同じフォルダ内のブックのデータを1つのブックに集計

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

フォルダ

 

複数ある日報のファイルを1つの月報のファイルに下図のように集計します。

日報月報

 

< スポンサーリンク >





複数ブックのデータを一つのブックに集計する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 acFileObj
            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に集計されます。

 

 

< スポンサーリンク >