フォルダ内のファイル名の配列を返す関数

タイトルのマクロは、以下

'**************************************
'* フォルダ内のファイル名の配列を返す関数。20230210
'* myFolder:フォルダ名。
'* 戻り値、フォルダ内のファイル名の配列
Function AllFileName(ByVal myFolder As String) As String()
    ' 新しいFileSystemObjectオブジェクトを作成
    With New FileSystemObject
        Dim myFiles As Files ' ファイルを格納するFilesコレクションを宣言
        Set myFiles = .GetFolder(myFolder).Files ' 指定フォルダ内のファイルを取得
        
        Dim Files() As String ' ファイル名を格納する配列を宣言
        Dim i As Long: i = 1 ' 配列のインデックスを初期化
        Dim myFile As File ' 各ファイルを参照するためのFileオブジェクトを宣言
        
        ' フォルダ内の各ファイルについてループ
        For Each myFile In myFiles
            ReDim Preserve Files(1 To i) ' 配列のサイズを変更し、現在の内容を保持
            Files(i) = myFile.Name ' 配列にファイル名を格納
            i = i + 1 ' インデックスをインクリメント
            ' Debug.Print myFile.Name ' ファイル名をデバッグ出力に表示(コメントアウト)
        Next myFile
    End With
    
    AllFileName = Files ' 配列を関数の戻り値として設定
End Function

詳細な説明

  1. 新しいFileSystemObjectオブジェクトを作成
    • FileSystemObject(FSO)は、ファイルやフォルダを操作するためのオブジェクトです。
    • この FileSystemObject(FSO)を使用するためには、Microsoft Scripting Runtime の参照設定が必要です。
  2. ファイルを格納するFilesコレクションを宣言
  3. 指定フォルダ内のファイルを取得
    • GetFolder メソッドで指定したフォルダのFilesコレクションを取得します。
  4. ファイル名を格納する配列を宣言
  5. 配列のインデックスを初期化
  6. 各ファイルを参照するためのFileオブジェクトを宣言
  7. フォルダ内の各ファイルについてループ
  8. 配列のサイズを変更し、現在の内容を保持
    • ReDim Preserve を使うことで、既存の内容を保持しながら配列のサイズを変更できます。
  9. 配列にファイル名を格納
  10. インデックスをインクリメント
  11. ファイル名をデバッグ出力に表示(コメントアウト)
  12. 配列を関数の戻り値として設定

このコードは、指定されたフォルダ内のファイル名を配列として返す関数です。ファイル名を取得し、配列に格納するための手順が詳細に説明されています。

以下が使用例です。

Sub ListFilesInFolder()
    Dim folderPath As String
    Dim fileNames() As String
    Dim i As Long
    
    ' フォルダパスを指定(例:デスクトップのフォルダ)
    folderPath = "H:\temp"
    
    ' フォルダ内のファイル名を取得
    fileNames = AllFileName(folderPath)
    
    ' シート1を取得
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' シートのA列にファイル名を出力
    For i = LBound(fileNames) To UBound(fileNames)
        ws.Cells(i + 1, 1).Value = fileNames(i)
    Next i
End Sub

詳細な説明

  • フォルダパスの指定
    • この部分で、ファイル名を取得したいフォルダのパスを指定します。
  • ファイル名の取得
    • AllFileName 関数を呼び出し、指定フォルダ内のファイル名を配列として取得します。
  • シートの指定
    • ファイル名を出力するシートを指定します。この例では “Sheet1” を使用しています。
  • ファイル名の出力
    • 取得したファイル名をシートのA列に順番に書き込みます。

このようにして、指定フォルダ内のファイル名をExcelシートにリストアップすることができます。

Follow me!