指定フォルダ内のファイルを処理するサンプルです。
処理自体は後から書くことを想定したものなので、「★ここに処理を書く★」のあたりを変更して使ってください。
指定フォルダ直下のみ処理します(サブフォルダ配下は対象外)。
Sub フォルダ内のExcelファイルを処理する() Dim FSO As Object 'ファイルシステムオブジェクト Dim FolderPath As String 'ダイアログで指定されたフォルダパス Dim objFolder As Object 'フォルダオブジェクト Dim objFiles As Object 'ファイルオブジェクト Dim objF As Object 'ファイルオブジェクト用for文変数 Dim FileCount As Long '処理するファイル数 Dim FilePaths() '処理するファイルパス(配列) Dim i As Long Dim xlsWorkbook As Workbook '開いたExcelファイル Dim WSH As Variant 'WSH(Windows Scripting Host) Dim DefaultPath As String 'デスクトップパス Set FSO = CreateObject("Scripting.FileSystemObject") Set WSH = CreateObject("WScript.Shell") '-------------------------------------- 'フォルダと直下のファイルを取得 '-------------------------------------- 'フォルダダイアログ DefaultPath = WSH.SpecialFolders("Desktop") & "\" 'デスクトップに指定 With Application.FileDialog(msoFileDialogFolderPicker) .InitialFileName = DefaultPath 'デフォルトフォルダをデスクトップにする If .Show = True Then FolderPath = .SelectedItems(1) End If End With 'フォルダダイアログで「キャンセル」したので終了 If FolderPath = "" Then Exit Sub 'フォルダ取得 Set objFolder = FSO.GetFolder(FolderPath) 'ファイルが1つもない場合は終了 If objFolder.Files.Count = 0 Then '終了メッセージ MsgBox "指定されたフォルダにはファイルが1つもないので、終了します。", _ vbOKOnly + vbExclamation Exit Sub End If 'ファイル取得 Set objFiles = objFolder.Files '-------------------------------------- 'ファイルパスを取得 '-------------------------------------- '処理するファイル数の初期化 FileCount = 0 For Each objF In objFiles 'Wordのファイルのみ処理 If LCase(FSO.GetExtensionName(objF.Name)) = "xls" Or _ LCase(FSO.GetExtensionName(objF.Name)) = "xlsx" Then 'ファイルカウント FileCount = FileCount + 1 'ファイルパスを取得するための動的配列を定義 If FileCount = 1 Then ReDim FilePaths(FileCount) Else ReDim Preserve FilePaths(FileCount) End If 'ファイルパスを配列に格納 FilePaths(FileCount) = objF End If Next objF '処理対象のファイルが1つもない場合は終了 If FileCount = 0 Then '終了メッセージ MsgBox "指定されたフォルダには処理対象となるファイルが1つもないので、終了します。", _ vbOKOnly + vbExclamation Exit Sub End If '-------------------------------------- 'ファイルを開いて処理する '-------------------------------------- For i = 1 To FileCount 'ファイルを開く(読み取り専用) Workbooks.Open FilePaths(i), ReadOnly:=True Set xlsWorkbook = ActiveWorkbook '★ここに処理を書く★ 'ファイルを閉じる xlsWorkbook.Close SaveChanges:=xlDoNotSaveChanges Next i '-------------------------------------- '終了 '-------------------------------------- 'オブジェクトクリア Set FSO = Nothing Set objFolder = Nothing Set objFiles = Nothing Set objF = Nothing Set xlsWorkbook = Nothing Set WSH = Nothing End Sub
・ファイルパスを配列に格納し、その後配列内をループして対象ファイルを処理する作りです。
・51-52行目 拡張子は xls と xlsx を処理しています。
・79行目 ReadOnly:=True で開いてますが、編集したいときは ReadOnly:=False で開いて、保存処理が必要になりますね。