適材適所

PowerShellやVBAなどプログラミング系の話多めで

【VBA】フォルダ内のファイル一覧を作成する

Excelに特定のフォルダ内のファイル名の一覧を作成したい!!

フォルダの中がちらかってしまったので一度整理したいが、現状どうなっているんだ?リスト化しなくては。

というわけで、そんな時に役に立つVBAのコードの紹介です。

説明

FileSystemObjectを使っていますが、CreateObjectしているので参照設定は不要です。コピペでいけます。

実行するとダイアログが表示されます。任意のフォルダを指定してください。フォルダを指定しないと静かに終了します。フォルダが指定されるとアクティブなワークシートにファイル名が書き出されます。

定数のSTART_ROWとWRITE_COLUMNを必要に応じて修正してください。両方1に設定しておくと、A1セルから書き出します。

START_ROWは書き出し開始する行番号を、WRITE_COLUMNは書き出しを行う列を設定します。

終了するとメッセージボックスが表示されます。

コード

 
Sub WriteSelectedFileNames()
    'シートの書き出し行
    Const START_ROW As Long = 1
    'シートの書き出し列
    Const WRITE_COLUMN As Long = 1
    '書き込み中の行を管理する
    Dim currentRow As Long
    '対象のフォルダ名を格納する
    Dim folderName As String
    'ファイルシステムオブジェクト用変数
    Dim fso As Object
    'ファイルオブジェクト用変数
    Dim fileObj As Object
    
    'ファイルシステムオブジェクトを生成
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    'ダイアログを表示
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show Then
            folderName = .SelectedItems(1)
        Else
            Exit Sub
        End If
    End With
    
    '書き込み開始行のセット
    currentRow = START_ROW
    'フォルダ内の走査。書き込み開始。
    For Each fileObj In fso.GetFolder(folderName).Files
        Cells(currentRow, WRITE_COLUMN) = fileObj.Name
        'fileObj.NameではなくfileObj.Pathとするとフルパスの一覧を作成できる
        'Cells(currentRow, WRITE_COLUMN) = fileObj.Path
        currentRow = currentRow + 1
    Next fileObj
   
    MsgBox "終了しました。"
End Sub

終わりに

FileSystemObjectを使っているので、ファイル名やフルパス以外にも様々な情報を書き出すことができます。興味のある方はFileSystemObjectについて調べてみてくださいね。