今回は、フォルダ内のファイルを、順番に処理するマクロを学びましたので、ダイアログを開いてフォルダ指定するところから備忘録に残します。
Application.FileDialog を使ってダイアログからフォルダを選んで、for eachを使ってフォルダ内ファイルを順番に操作するやり方です。
ダイアログを開く
Sub foldfie()
Application.FileDialog(msoFileDialogFolderPicker).Show
End Sub
↑ これでダイアログは開くのですが、フォルダを選んでも、キャンセルを押しても、そのまま閉じて終わってしまいます。
↓なので、With ステートメントを使用して、フォルダのパスを SelectedItems にて取得し、変数Pに憶えておいてもらい、フォルダ内のファイルを順次操作していきます。
Sub foldfile()
Dim P As String
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = True Then
P = .SelectedItems(1)
Else
Exit Sub
End If
End With
↑ P はパスで文字列なので、型は String で宣言です。
↓ .InitialFileName = “C:\” を追加すると、ダイアログが開くフォルダの初期値を指定できます。”” ダブルクォーテーションの中に、パスを記述です。
Sub foldfile()
Dim P As String
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = “C:\”
If .Show = True Then
P = .SelectedItems(1)
Else
Exit Sub
End If
End With
End Sub
フォルダ内のファイルを For Each を使って順次処理する
Sub foldfile()
Dim P As String
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = “C:\”
If .Show = True Then
P = .SelectedItems(1)
Else
Exit Sub
End If
End With
Dim myfso As Object
Dim file As Object
Set myfso = CreateObject(“Scripting.FileSystemObject”)
For Each file In myfso.getFolder(P).Files
If myfso.GetExtensionName(file.Name) = “xlsx” Then
Dim wb As Workbook
Set wb = Workbooks.Open(Filename:=file)
Worksheets(“前年度”).Select
ActiveSheet.Name = “今年”
Range(“A1”).Value = “2023年”
wb.Close
End If
Next
End Sub
ファイルシステムオブジェクト(FSO)を、参照設定を行うことなく、CreateObject関数を使用し、Object型で宣言して使うことがきるやり方です。
参照設定を行うよりも実行速度が遅くなるらしいのですが、参照設定を行わないで済む、こちらのマクロを今回学びました。
いくつものサイトを見させていただいて、できる大事典の kindleunlimited の読み放題で拝借して、今回このマクロにたどり着けました。
↑↑↑
参照設定を行わないで済む、と書いておりますが、参照設定を行わないと、最初に一度はデバッグとなります。
ツール → 参照設定から、Microsoft Scripting Runtime にチェックを入れてOKを押し、参照設定をしてください!
今回も、先人の知恵と kindle読み放題に感謝して終わりたいと思いますm(_ _)m
コメント