エクセルVBAでファイル情報を取得する方法

 エクセルVBA(Visual Basic for Applications)を使うと、エクセルデータ以外にも、ファイルの情報を簡単に取得することができます!例えば、ファイルのサイズや更新日など、さまざまな情報を自動で取得することができるんです。

 これを使えば、ファイル管理が効率的になり、他の作業にも応用できる便利な機能です。今回は、エクセルVBAを使ってファイル情報を取得する方法について紹介します!

1つのフォルダからファイル情報を取得する場合

 今回はCドライブ直下に「ファイル情報を取得_1」フォルダをセッティングし、そのフォルダ内で「Book1」、「達成率グラフ」という2つのファイルを格納しました。このファイル情報をエクセルで取得していきたいと思います!

 今回はマクロを実行するファイルに、「一つのフォルダにあるファイル情報を取得」というシートを作成したので、こちらのシートにファイル情報を記載していきます!

 ファイル情報を取得するVBAコードを記載します。今回はわかりやすいように、「一つのフォルダにあるファイル情報を取得」というシート名で記載してします。※適宜シート名に合わせ、変更してください!

Sub 一つのフォルダからファイル情報を取得()

    '変数定義
    Dim folderPath As String
    Dim fileName As String
    Dim filePath As String
    Dim fileDate As Date
    Dim rowNum As Long
    
    'ファイルサーバのパスを指定(例:\\サーバー名\共有フォルダ\)
    '今回はCドライブ直下に置いた「ファイル情報を取得_1」フォルダ内にあるファイル情報を取得
    folderPath = "C:\ファイル情報を取得_1\"
    
    'シートの一行目に項目名を記載
    '今回は「一つのフォルダにあるファイル情報を取得」シートに、「フォルダ名」~「ファイルサイズ(バイト)」までの4項目を記載
    rowNum = 1
    Sheets("一つのフォルダにあるファイル情報を取得").Cells(rowNum, 1).Value = "フォルダ名"
    Sheets("一つのフォルダにあるファイル情報を取得").Cells(rowNum, 2).Value = "ファイル名"
    Sheets("一つのフォルダにあるファイル情報を取得").Cells(rowNum, 3).Value = "最終更新日時"
    Sheets("一つのフォルダにあるファイル情報を取得").Cells(rowNum, 4).Value = "ファイルサイズ (バイト)"
    
    '2行目以降にファイル情報を追記していくため、「rowNum」に1を足し、2行目に移行する
    rowNum = rowNum + 1

    ' フォルダ内の全ファイルを検索
    fileName = Dir(folderPath & "*.*")
    
    'Do loopでフォルダ内の全ファイルのファイル情報を追記していく
    Do While fileName <> ""
        filePath = folderPath & fileName
        
        ' ファイルの最終更新日時とファイルサイズを取得
        fileDate = FileDateTime(filePath)
        fileSize = FileLen(filePath)
        
        ' Excelシートにフォルダ、ファイル名、最終更新日時、ファイルサイズを出力
        Sheets("一つのフォルダにあるファイル情報を取得").Cells(rowNum, 1).Value = folderPath
        Sheets("一つのフォルダにあるファイル情報を取得").Cells(rowNum, 2).Value = fileName
        Sheets("一つのフォルダにあるファイル情報を取得").Cells(rowNum, 3).Value = fileDate
        Sheets("一つのフォルダにあるファイル情報を取得").Cells(rowNum, 4).Value = fileSize
        
        '「rowNum」に1を足し、次の行に移行する。以降ファイルがある限り次の行への移行を繰り返す
        rowNum = rowNum + 1
        
        ' 次のファイルを取得
        fileName = Dir
    Loop

    MsgBox "ファイル情報の取得が完了しました。", vbInformation

End Sub

 こちらのVBAコードを実行すると、フォルダ内にあるファイル情報を取得することができました!

複数のフォルダからファイル情報を取得する場合

 今回はCドライブ直下に「ファイル情報を取得_1」と「ファイル情報を取得_2」フォルダをセッティングし、それぞれのフォルダ内にある合計4ファイルの情報を取得していきたいと思います!

 今回はマクロを実行するファイルに、「複数フォルダにあるファイル情報を取得」というシートを作成したので、こちらのシートにファイル情報を記載していきます!

 ファイル情報を取得するVBAコードを記載します。先ほどと同様わかりやすいように、「複数フォルダにあるファイル情報を取得」というシート名で記載しました。※適宜シート名に合わせ、変更してください!

Sub 複数のフォルダからファイル情報を取得()

    Dim folderPaths As Variant
    Dim folderPath As String
    Dim fileName As String
    Dim filePath As String
    Dim fileDate As Date
    Dim fileSize As Long
    Dim rowNum As Long
    Dim i As Integer
    
    ' 複数のフォルダのパスを配列として指定
    '今回はCドライブ直下に置いた「ファイル情報を取得_1」と「ファイル情報を取得_2」フォルダ内にあるファイル情報を取得
    folderPaths = Array("C:\ファイル情報を取得_1\", "C:\ファイル情報を取得_2\")
    
    'シートの一行目に項目名を記載
    rowNum = 1
    Sheets("複数フォルダにあるファイル情報を取得").Cells(rowNum, 1).Value = "フォルダ名"
    Sheets("複数フォルダにあるファイル情報を取得").Cells(rowNum, 2).Value = "ファイル名"
    Sheets("複数フォルダにあるファイル情報を取得").Cells(rowNum, 3).Value = "最終更新日時"
    Sheets("複数フォルダにあるファイル情報を取得").Cells(rowNum, 4).Value = "ファイルサイズ (バイト)"
    
    '2行目以降にファイル情報を追記していくため、「rowNum」に1を足し、2行目に移行する
    rowNum = rowNum + 1

    ' フォルダごとにループ(配列の最小値から最大値までを取得)
    For i = LBound(folderPaths) To UBound(folderPaths)
        folderPath = folderPaths(i)
        
        'フォルダ内の全ファイルを検索
        fileName = Dir(folderPath & "*.*")
        
        'Do loopでフォルダ内の全ファイルのファイル情報を追記していく
        Do While fileName <> ""
            filePath = folderPath & fileName
            
            ' ファイルの最終更新日時とファイルサイズを取得
            fileDate = FileDateTime(filePath)
            fileSize = FileLen(filePath)
            
            ' Excelシートにフォルダ、ファイル名、最終更新日時、ファイルサイズを出力
            Sheets("複数フォルダにあるファイル情報を取得").Cells(rowNum, 1).Value = folderPath ' フォルダ名
            Sheets("複数フォルダにあるファイル情報を取得").Cells(rowNum, 2).Value = fileName ' ファイル名
            Sheets("複数フォルダにあるファイル情報を取得").Cells(rowNum, 3).Value = fileDate ' 最終更新日時
            Sheets("複数フォルダにあるファイル情報を取得").Cells(rowNum, 4).Value = fileSize ' ファイルサイズ
            
            '「rowNum」に1を足し、次の行に移行する。以降ファイルがある限り次の行への移行を繰り返す
            rowNum = rowNum + 1
            
            ' 次のファイルを取得
            fileName = Dir
        Loop
    Next i

    MsgBox "ファイル情報の取得が完了しました。", vbInformation

End Sub

 こちらのVBAコードを実行すると、複数フォルダ内にあるすべてのファイル情報を取得することができました!

<補足>VBAコードで使用した関数について

 今回VBAコードで使用した関数について、参考までにまとめてみました!「Lbound」と「Ubound」は最初と最後のインデックス番号を取得できるため、組み合わせることによって配列要素のループ処理を効率的に実行するときにとても便利です!

 ファイルの一覧や更新状況が知りたいとき、自動且つ瞬時に情報を取得できるのは便利ですよね!エクセルでファイル情報を管理したり、わざわざフォルダを見に行かなくてもファイルの更新状況が分かったり、日々のルーティン作業を効率化することが期待できると思います!

 今回の内容が少しでも参考になれば幸いです。
ご覧いただき、ありがとうございました!

コメント

タイトルとURLをコピーしました