本ページはプロモーションが含まれています。

VBAフォルダ内のファイルを順番に処理する、ダイアログからフォルダ指定して for each を使うやり方

スポンサーリンク

今回は、フォルダ内のファイルを、順番に処理するマクロを学びましたので、ダイアログを開いてフォルダ指定するところから備忘録に残します。

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

コメント

タイトルとURLをコピーしました