top of page

フォルダ内のファイル一覧を取得する

更新日:2024年1月17日


<概要>


 今回は、特定のフォルダ内のファイル一覧を取得する汎用プロシージャを紹介します。


 汎用プロシージャで指定するのは対象のフォルダのフルパスおよび、一覧を取得するファイルの拡張子です。


 実務で汎用的に使えるためにファイルの拡張子は引数で複数入力できるようにしてあります。これには可変長引数配列(ParamArray)という記述方法を利用しています。



<用途>


  • フォルダ内のファイル一覧を取得する



<プロシージャ紹介>


Public Function GetFiles(FolderPath As String, ParamArray Extensions() As Variant) As Variant


名前: GetFiles /Functionプロシージャ

説明: フォルダ内のファイルを一覧で取得する


引数 FolderPath・・・検索対象のフォルダパス

Extensions・・・取得対象の拡張子、可変長引数配列で入力


<実行例>


 次のようなコードを用意します。


Public Sub TestGetFiles()

    'フォルダ指定
    Dim FolderPath       As String
    FolderPath = "C:\Test\GetFiles用"
    
    '対象の拡張子を変えて3通りで実行
    Dim FileList_txt     As Variant
    Dim FileList_bmp     As Variant
    Dim FileList_txt_bmp As Variant
    FileList_txt = GetFiles(FolderPath, "txt")
    FileList_bmp = GetFiles(FolderPath, "bmp")
    FileList_txt_bmp = GetFiles(FolderPath, "txt", "bmp")
    
    Stop 'ローカルウィンドウを確認すべし
    
End Sub

 対象のフォルダのフォルダパスは「C:\Test\GetFiles用」を指定していますが、テスト用としてこのフォルダには次のようなファイルを用意しています。


 

 実行後にローカルウィンドウを確認して各変数「FileList_txt」「FileList_bmp」「FileList_txt_bpm」の中身を確認すると、引数で指定した拡張子のファイルのファイル名が一次元配列に格納されているのが確認できます。




<サンプルファイル>




<コード>


 Gist

Public Function GetFiles(ByRef FolderPath As String, _
                  ParamArray Extensions() As Variant) _
                                          As Variant
'フォルダ内のファイルを一覧で取得する
'「Microsoft Scripting Runtime」ライブラリを参照すること
'20231218 リファクタリング

'引数
'FolderPath・・・検索対象のフォルダパス
'Extensions・・・取得対象の拡張子、可変長引数配列で入力
    
'参考
'https://www.softex-celware.com/post/getfiles

'返り値
'ファイル名一覧の一次元配列
'ファイルが1つもなかったらEmptyを返す

    '※※※※※※※※※※※※※※※※※※※※※※※※※※
    '引数チェック
    'フォルダの確認
    Dim FSO As New FileSystemObject
    If FSO.FolderExists(FolderPath) = False Then
        MsgBox "「" & FolderPath & "」" & vbLf & _
               "のフォルダの存在が確認できません。" & vbLf & _
               "処理を終了します。", vbExclamation
        Exit Function
    End If
    
    '※※※※※※※※※※※※※※※※※※※※※※※※※※
    '処理
    '拡張子の連想配列を作成
    Dim ExtensionDict As New Dictionary
    Dim TmpExtension  As String
    Dim I             As Long
    For I = 0 To UBound(Extensions, 1)
        TmpExtension = Extensions(I)
        
        '小文字に変換
        TmpExtension = StrConv(TmpExtension, vbLowerCase)
        ExtensionDict.Add TmpExtension, ""
    Next
    
    'フォルダ内の各ファイルを取得して、対象の拡張子だけ配列に格納
    Dim Folder        As Scripting.Folder
    Set Folder = FSO.GetFolder(FolderPath)
    
    Dim File          As Scripting.File
    Dim FileExtension As String
    Dim FileName      As String
    Dim K             As Long: K = 0
    Dim N             As Long
    Dim Output        As Variant: ReDim Output(1 To 1)

    If Folder.Files.Count = 0 Then
        'ファイルが1つもなかったらEmptyを返す
        Exit Function
    End If
    
    For Each File In Folder.Files
        FileName = File.Name 'ファイル名を取得
        
        '拡張子を取得して小文字に変換
        FileExtension = FSO.GetExtensionName(FileName)
        FileExtension = StrConv(FileExtension, vbLowerCase)
        
        If ExtensionDict.Exists(FileExtension) = True Then
            K = K + 1
            ReDim Preserve Output(1 To K)
            Output(K) = FileName
        End If
    Next
    
    '※※※※※※※※※※※※※※※※※※※※※※※※※※
    '出力
    GetFiles = Output
    
End Function

Comments


softex-celware

​インボイス登録番号:T5810983887134

  • Facebook
  • Twitter
  • YouTube

©2023 softex-celware。Wix.com で作成されました。

bottom of page