MENU

【コピペで使える】VBAで指定したフォルダ内のファイル名を一覧で取得してシートに書き出す方法

【コピペで使える】VBAで指定したフォルダ内のファイル名を一覧で取得してシートに書き出す方法 サムネ画像
  • URLをコピーしました!


今回は、VBAを使って指定したフォルダ内のファイル名を一覧で取得してシートに書き出す方法をご紹介します。
VBAの詳しい説明は別の記事にまとめていますので、そちらも参考にしてください。
※今回のサンプルは、Windowsで使用することを想定しています

あわせて読みたい
【VBA入門】Excelを自動化して業務を効率化! VBA(Visual Basic for Applications)は、Microsoft ExcelなどのOffice製品に組み込まれているプログラミング言語です。Excelの作業を自動化したり、繰り返し処理を行ったりといった便利な機能を追加できます。
あわせて読みたい
【初心者向け】Excelで「開発」タブを表示させる方法 Excelを使っていると、「開発」タブが表示されていないことに気づくかもしれません。 「開発」タブは、VBAやマクロを利用する際に必要となります。このタブを表示させることで、Excelでの操作を自動化したり、高度な機能を使えるようになります。
目次

準備

  1. Excelの「開発」タブを表示
    VBAを使うには「開発」タブが必要です。
  2. VBAエディタの起動
    「開発」タブの「Visual Basic」をクリックし、VBAエディタを開きます。

※書き出したいフォルダとファイルの準備も必要です

サンプルコード

  1. 新しいモジュールを追加
    VBAエディタのメニューから「挿入」→「標準モジュール」を選択し、新しいモジュールを追加します。
  2. コードを貼り付ける
    以下のコードをモジュールに貼り付けてください。
Sub ListFilesWithDetails()
    Dim folderPath As String
    Dim ws As Worksheet
    Dim i As Long
    Dim sheetName As String
    Dim ans As VbMsgBoxResult
    
    ' フォルダ選択ダイアログ
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "フォルダを選択してください"
        If .Show <> -1 Then Exit Sub
        folderPath = .SelectedItems(1)
    End With
    
    ' シート名の入力
    sheetName = InputBox("出力先のシート名を入力してください", "シート名指定", "ファイル一覧")
    If sheetName = "" Then Exit Sub
    
    ' すでにシートが存在するか確認
    On Error Resume Next
    Set ws = Worksheets(sheetName)
    On Error GoTo 0
    
    If Not ws Is Nothing Then
        ans = MsgBox("シート「" & sheetName & "」はすでに存在します。上書きしますか?", vbYesNo + vbExclamation)
        If ans = vbNo Then Exit Sub
        Application.DisplayAlerts = False
        ws.Delete
        Application.DisplayAlerts = True
    End If
    
    ' 新しいシート作成
    Set ws = Worksheets.Add
    ws.Name = sheetName
    
    ' ヘッダー
    ws.Cells(1, 1).Value = "ファイル名"
    ws.Cells(1, 2).Value = "フルパス"
    ws.Cells(1, 3).Value = "更新日時"
    ws.Cells(1, 4).Value = "サイズ(KB)"
    i = 2

    ' ファイル一覧取得
    Call GetFilesRecursive(folderPath, ws, i)
    
    ' 表の整形
    ws.Columns("A:D").AutoFit
    MsgBox "完了しました!", vbInformation
End Sub

Sub GetFilesRecursive(ByVal folderPath As String, ByRef ws As Worksheet, ByRef rowIndex As Long)
    Dim fso As Object, folder As Object, file As Object, subFolders As Object, subF As Object
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set folder = fso.GetFolder(folderPath)
    
    ' ファイル一覧取得
    For Each file In folder.Files
        ws.Cells(rowIndex, 1).Value = file.Name
        ws.Cells(rowIndex, 2).Value = file.Path
        ws.Cells(rowIndex, 3).Value = file.DateLastModified
        ws.Cells(rowIndex, 4).Value = Round(file.Size / 1024, 1)
        rowIndex = rowIndex + 1
    Next
    
    ' サブフォルダも再帰的に処理
    Set subFolders = folder.SubFolders
    For Each subF In subFolders
        GetFilesRecursive subF.Path, ws, rowIndex
    Next
End Sub

今回は、サンプルフォルダの中に食べ物の名前をつけたファイルを用意しました。

VBA説明用画像0

実行方法

1.コードを貼り付けたら、VBAエディタを閉じて「開発」タブの「マクロ」をクリックして実行
2.書き出したいフォルダを指定して、OKをクリック

VBA説明用画像4

3.シート名を入力して、OKをクリック
※すでにあるシート名を入力すると、上書きして良いか確認するポップアップが表示されて、許可すると上書きされる

VBA説明用画像3

4.処理が終わると、完了が表示されて、入力したシートに ファイル名/フルパス/更新日時/サイズ が出力される

VBA説明用画像1

まとめ

VBAを勉強し始めて、実際に動くコードが見たい方や、業務でファイル名をリストで出したい方の役に立てればと思い、コピペですぐに使えるサンプルコードを載せています。

次回は、より詳しくコードの解説をしていきますので、アレンジしたい方や理解を深めたい方は是非ご覧ください!

別投稿で、CSVファイルの内容をExcelに転記する方法も紹介しています!

あわせて読みたい
【コピペで使える】VBAでCSVファイルの内容をExcelに転記する方法 【コピペで使える】CSVファイルに保存されているデータをExcelに取り込むことで、データの編集や集計が簡単になります。今回は、VBAを使ってCSVのデータをExcelのシートに自動で転記する方法をご紹介します。
あわせて読みたい
【コピペで使える】VBAでCSVファイルの内容をExcelに転記する方法② 前回投稿したサンプルコードを解説いたしました。ぜひ業務の効率化に役立ててください!CSV(Comma-Separated Values)ファイルは、データを「,」で区切ったテキストファイルです。Excelや他のアプリケーションでデータを簡単にやり取りするのに便利です。
あわせて読みたい
【コピペで使える】VBAでCSVファイルの内容をExcelに転記する方法③ 前回投稿したサンプルコードを解説いたしました。ぜひ業務の効率化に役立ててください!
よかったらシェアしてね!
  • URLをコピーしました!
目次