適材適所

WindowsやPowerShellやネットワーク、IBMなどのシステム系の話など気になったことも載せているブログです。

【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を使っているので、ファイル名やフルパス以外にも様々な情報を書き出すことができます。

また、こういったファイルシステムの処理はVBAよりもPowerShellを使うと比較的簡単にできます。

興味のある方はPowerShellに関する記事もご覧いただければ幸いです。

www.tekizai.net

というわけで、ここまでお読みいただき、ありがとうございました。