下記図のようにフォルダ名をVersion情報や日付、番号などで管理しているケースでファイルを自動抽出する方法を紹介します。
ファイル名は決まってるけど(下記例は”csvFile.csv”)、フォルダ名は決まってないときに便利だね!
目次
指定フォルダからファイルを自動抽出 サンプル
抽出したいファイル名は決まってるけど、フォルダ名が決まっていない
このようなケースでInputBoxでフォルダのVersion情報を入力するだけで、指定したフォルダにアクセスしサブフォルダも含めて抽出したいファイルを検索し、パスをセルに記載するサンプルになります。
再帰呼び出しにより指定したフォルダ下の全サブフォルダにアクセスします。
サンプルでは指定したフォルダ下には必ずファイル名が”csvFile.csv”のcsvファイルが1つのみ存在することが前提条件となります。
実行したら、ワークシート”Sheet1″のB2セルにPathが下記出されるのでご注意ください。
*****部分含む、FOLDER_PATHの値は個人の環境に書き換えてください。
Sub Sample()
Const FOLDER_PATH As String = "C:\Users\*****\VBA\実践\指定フォルダからファイル自動抽出"
Dim Version As Long
ThisWorkbook.Worksheets("Sheet1").Activate
Version = InputBox("Versionを入力してください")
Call FileSearch(FOLDER_PATH & "\フォルダ_Version" & Version)
End Sub
Sub FileSearch(Path As String)
Dim FSO As Object, Folder As Variant, FIle As Variant
Set FSO = CreateObject("Scripting.FileSystemObject")
For Each Folder In FSO.GetFolder(Path).SubFolders
Call FileSearch(Folder.Path)
Next Folder
For Each FIle In FSO.GetFolder(Path).Files
If InStr(FIle.Type, "CSV") > 0 Then
Cells(2, 2) = FIle.Path
End If
Next FIle
End Sub
まとめ
InputBoxで入力しているデータはUserFormに置き換えしたり、FileTypeでcsvファイルに限定しているところもファイル名指定にすると汎用性が高まります。
この記事がミス撲滅や生産性向上につながるととても嬉しいです。
VBA初級から抜け出すための知恵と、実務で活用できるスキルが学べる1冊です!激しくオススメ!
コメント