LoginSignup
0
0

More than 5 years have passed since last update.

Windows 10 Pro x64 + Excel2016 x86 VBA で指定フォルダ以下のファイルの一覧を取得する

Last updated at Posted at 2019-03-06

目的

dir() を使用したものはよく見るのだけど、FileSystemObjectを使って実装してみる
以下検討事項
・ファイル名用の配列はモジュール・ローカルが良いのかどうか?
・拡張子は Optional にするべき?
・追加の Optional としては、フォルダ/ファイルのフラグ追加はどうかな?

サンプルコード


'=================================================================
' 名 称 : FileProcMain
' 機 能 : 指定フォルダ以下のファイル取得後表示する
'    : 名前とか特に意味はない 
'=================================================================
Sub FileProcMain()
'
    Dim fList()     As String
    Dim cnt         As Integer
'
    ReDim fList(0)
    Call getFileList("/path/to/target/folder", "py", fList())
'
    For cnt = 1 To UBound(fList)
        Debug.Print (fList(cnt))
    Next
'
End Sub

'=================================================================
' 名 称 : getFileList
' 機 能 : 指定フォルダ以下のファイル名の一覧を取得する
'=================================================================
Sub getFileList(astrPath As String, astrExt As String, aList() As String)
'
    Dim objFso      As New FileSystemObject
    Dim objFolders  As Folder
    Dim objFiles    As File
    Dim cnt         As Integer
    '
    '   サブフォルダを取得する
    '
    For Each objFolders In objFso.GetFolder(astrPath).SubFolders
        Call getFileList(objFolders.Path, astrExt, aList)
    Next
    '
    '   ファイルを取得する
    '   このフォルダにあるサブフォルダ以下のファイル一覧は取得済
    '
    For Each objFiles In objFso.GetFolder(astrPath).Files
        '
        '   指定拡張子のファイルのみを処理対象とする
        '
        If StrConv(objFso.GetExtensionName(objFiles.Name), vbUpperCase) = StrConv(astrExt, vbUpperCase) Then
            cnt = UBound(aList)
            ReDim Preserve aList(cnt + 1)

            aList(cnt + 1) = objFso.BuildPath(astrPath, objFiles.Name)
        End If
    Next
'
End Sub
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0