指定したフォルダ内のExcelファイルに対して、同じ処理をする

タイトルのサブルーチンは、以下です。

' 指定したフォルダ内のExcelファイルに対して、同じ処理をする
Private Sub ProcessFilesInFolder(ByVal folderPath As String)
    Dim fso As Object
    Dim fileName As String
    Dim wb As Workbook
    Dim file As Variant
    
    ' FileSystemObjectを作成
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    
    ' フォルダ内の各ファイルに対して処理
    For Each file In fso.GetFolder(folderPath).Files
        If LCase(Right(file.Name, 5)) = ".xlsx" Or LCase(Right(file.Name, 4)) = ".xls" Then ' Excelファイルの拡張子を確認
            ' ファイルを開く
            Set wb = Workbooks.Open(file.Path)
            
            ' 必要な処理を実行
            Call ProcessWorkbook(wb)
            
            ' ファイルを保存
            wb.Save
            
            ' ファイルを閉じる
            wb.Close
        End If
    Next file
End Sub

Private Sub ProcessWorkbook(ByRef wb As Workbook)
    ' ここに各ファイルに対する処理を追加
    ' 例えば、必要な列のコピー、シートの削除、シート名変更など
    ' 以下にサンプルの処理を追加しています
    Dim targetSheet As Worksheet
    Dim newSheetName As String
    
    ' シートを追加(新しいシート名は変更が必要)
    Set targetSheet = wb.Sheets.Add
    
    ' 追加したシートの名前を変更(変更が必要)
    newSheetName = "変更後のシート名"
    targetSheet.Name = newSheetName
    
    ' シートの削除
    wb.Sheets(2).Delete ' シート名は適切なものに変更
    
End Sub

各ファイルに対する具体的な処理は ProcessWorkbook サブルーチン内で実装されます。この部分をカスタマイズしてご使用ください。

使用例は、以下です。処理したいフォルダを引数として、ProcessFilesInFolderを呼び出してください。

Private Sub 使用例()
    Dim folderPath As String
    ' フォルダのパスを指定
    folderPath = "C:\YourFolderPath\" ' フォルダのパスを適切なものに変更

    Call ProcessFilesInFolder(folderPath)
End Sub

Follow me!