F0000045_指定のフォルダ内に存在するファイル名一覧をワイルドカードを指定して抽出する

指定のフォルダ内に存在するファイル名一覧をワイルドカードを指定して抽出する 関数リファレンス

この関数について

ExcelVBA(マクロ)でフォルダやファイルの存在を確認するためには「Dir」という非常に便利な備え付けの関数があります。しかしこの関数を使用しないという人は多いです。前回の記事(指定のフォルダ内に存在するフォルダ名一覧をワイルドカードを指定して抽出する)でも解説したようにDir関数には落とし穴があるためです。このページで紹介する関数はDir関数を使用せずにフォルダ内にあるファイル名一覧を取得することができます。

関数コピペ ~コードをクリックするだけでコピー完了!~

Public Function GetFilesNameInFolder(ByVal target_folder_path As String, ByVal wild_card As String) As String()
  Dim fso As Object: Set fso = CreateObject("Scripting.FileSystemObject")
  Dim target_folder As Object: Set target_folder = fso.GetFolder(target_folder_path)
  Dim result_table() As String, target_files As Object
  For Each target_files In target_folder.files
    If target_files.Name Like wild_card Then
      If IsInitArray(result_table) Then
        ReDim Preserve result_table(0 To UBound(result_table, 1) + 1)
      Else
        ReDim result_table(0 To 0)
      End If
      result_table(UBound(result_table, 1)) = target_files.Name
    End If
  Next target_files
  GetFilesNameInFolder = result_table
End Function
Public Function IsInitArray(ByRef arr As Variant) As Boolean
On Error GoTo UnDefined
  IsInitArray = IsNumeric(UBound(arr, 1))
  Exit Function
UnDefined: IsInitArray = False
End Function

使い方 ①引数

引数名参照省略内容
target_folder_pathStringByVal不可フォルダの絶対パスを指定します。このフォルダ内から次に指定する条件に合致するファイルを探索します。
wild_cardStringByVal不可探索したいファイル名を指定します。ワイルドカードを使用できます。

使い方 ②戻り値

状態内容
正常String()ファイル名が格納された配列を返します。Base:0
例外String例外は想定されていません
エラーStringエラー処理は行いません

サンプルコード(クリックでコピー)

Private Sub Test_GetFilesNameInFolder()
  Dim files() As String, i As Long
  files = GetFilesNameInFolder(ThisWorkbook.Path, "*")
  For i = LBound(files, 1) To UBound(files, 1) Step 1
    Debug.Print files(i)
  Next i
End Sub

【結果】ファイル名の一覧を取得することができました

サンプルコードを実行するとイミディエイトウィンドウにマクロと同じ階層にあるファイル名の一覧が出力されます。Dir関数とは異なり呼び出し元・呼び出し先など意識することなく使用できます。

関数リファレンスにはコピペで使用可能な便利関数を多数掲載!

関数リファレンスでは私が開発の中で必要になったコード部品を汎用化・関数化して公開しています。この記事で紹介した関数以外にもコピペで利用できる関数を多数用意しています。検索窓から必要な機能を検索してみましょう!解説記事も続々公開中。

Comment