フォルダ内ループ

バッチ処理をする場合、複数のExcelデータがフォルダ内にまとめられており、それらを順次読み込んで該当シートを処理することがよくあります。サブフォルダを読む必要がある場合もあります。下記のコードはこれらの見本です。
●フォルダ内繰り返し(単層)
Dim ファイル As Object
Dim wb As Workbook
Dim ws As Worksheet
With CreateObject("Scripting.FileSystemObject")
For Each ファイル In .GetFolder("C:\Sample").Files
Set wb = Workbooks.Open(Filename:=ファイル.Path)
For Each ws In wb.Worksheets
'*** やりたいこと ***
Next
wb.Close SaveChanges:=True
Set wb = Nothing
Next ファイル
End With
●フォルダ内繰り返し2(下層全部 再帰呼び出し版)
Sub 一括更新()
Call 再帰更新("C:\Users\sys01\Documents\予算表数式更新\TEST")
End Sub
Sub 再帰更新(パス As String) 'フォルダの下の全ファイルを処理
Dim FSO As Object
Dim フォルダ As Object
Dim サブフォルダ As Object
Dim ファイル As Object
Dim wb As Workbook
Dim ws As Worksheet
Set FSO = CreateObject("Scripting.FileSystemObject")
Set フォルダ = FSO.GetFolder(パス)
For Each サブフォルダ In フォルダ.SubFolders 'フォルダ内のサブフォルダを処理
再帰更新 サブフォルダ.Path '再帰的呼び出し
Next サブフォルダ
For Each ファイル In フォルダ.Files 'カレントフォルダ内のファイルを処理
If (InStr(ファイル.Name, "xlsm") > 0) Then
Set wb = Workbooks.Open(Filename:=ファイル.Path)
For Each ws In wb.Worksheets
'*** やりたいこと ***
Next
wb.Close SaveChanges:=True
Set wb = Nothing
End If
Next ファイル
Set フォルダ = Nothing
Set FSO = Nothing
End Sub

ディスカッション
コメント一覧
まだ、コメントがありません