【Excel VBA】FSOでファイル名、拡張子、更新日時などの詳細情報を取得する方法

VBAで特定のファイルやフォルダ内のファイル一覧を扱う際、ファイル名だけでなく、そのファイルの拡張子、サイズ、最終更新日といった詳細な情報(メタデータ)を取得したい場面は非常に多くあります。

FileSystemObject (FSO)を使えば、ファイルを開くことなく、これらの情報を簡単かつ高速に取得できます。この記事では、FSOを使ってファイルの様々なプロパティにアクセスする方法を、具体的なコードと共に解説します。


目次

【準備】参照設定

FSOを快適に利用するため、VBAエディタでツール > 参照設定を開き、**「Microsoft Scripting Runtime」**にチェックを入れておくことを推奨します。


完成したVBAコード

以下は、このマクロが書かれているExcelファイル自身の詳細情報を取得し、アクティブシートのB列に書き出すサンプルコードです。

'参照設定: Microsoft Scripting Runtime
Sub GetFileProperties()

    ' 変数を宣言します
    Dim fso As New FileSystemObject
    Dim targetFile As File
    Dim targetFilePath As String
    
    '--- 調査対象のファイルパスを設定 ---
    targetFilePath = ThisWorkbook.FullName

    ' ファイルが存在しない場合は処理を中断
    If Not fso.FileExists(targetFilePath) Then
        MsgBox "対象ファイルが見つかりません。", vbCritical
        Exit Sub
    End If

    '--- 1. FSOのメソッドでパス文字列から情報を取得 ---
    Range("B1").Value = fso.GetBaseName(targetFilePath)   ' ベース名 (拡張子なし)
    Range("B2").Value = fso.GetExtensionName(targetFilePath) ' 拡張子のみ

    '--- 2. Fileオブジェクトを取得し、そのプロパティから情報を取得 ---
    Set targetFile = fso.GetFile(targetFilePath)
    
    With targetFile
        Range("B3").Value = .DateCreated        ' 作成日時
        Range("B4").Value = .DateLastAccessed   ' 最終アクセス日時
        Range("B5").Value = .DateLastModified   ' 最終更新日時
        Range("B6").Value = .Drive              ' ドライブ名
        Range("B7").Value = .ParentFolder       ' 親フォルダのパス
        Range("B8").Value = Format(.Size / 1024, "#,##0") & " KB" ' サイズ(KB単位)
        Range("B9").Value = .Type               ' ファイルの種類
    End With
    
    ' オブジェクトを解放
    Set targetFile = Nothing
    Set fso = Nothing
    
    MsgBox "ファイルの情報を取得しました。"

End Sub

コードのポイント解説

FSOでファイル情報を取得するには、大きく分けて2つのアプローチがあります。

① パス文字列を直接操作するメソッド

FSOオブジェクトは、ファイルパスの文字列を引数として、特定の情報だけを抜き出す便利なメソッドを持っています。

  • .GetBaseName(ファイルパス): Report.xlsx から Report の部分だけを返します。
  • .GetExtensionName(ファイルパス): Report.xlsx から xlsx の部分だけを返します。

Fileオブジェクトのプロパティを利用する

Set targetFile = fso.GetFile(targetFilePath)
...
Range("B3").Value = targetFile.DateCreated

.GetFileメソッドで、まずファイル全体を表すFileオブジェクトを取得します。一度オブジェクトを取得すれば、そのプロパティを参照するだけで、様々な情報にアクセスできます。

プロパティ説明
.Nameファイル名(拡張子を含む)
.Pathファイルのフルパス
.ParentFolder親フォルダのパス
.Sizeファイルサイズ(バイト単位)
.Typeファイルの種類(例: “Microsoft Excel ワークシート”)
.DateCreated作成日時
.DateLastModified最終更新日時
.DateLastAccessed最終アクセス日時
.Driveドライブ名(例: “C:”)

【応用】フォルダ内の全ファイル情報を一覧化する

このテクニックを応用すれば、指定したフォルダ内の全ファイルの詳細情報をシートに書き出す、といった実用的なマクロも作成できます。

Sub ListUpAllFileProperties()
    Dim fso As New FileSystemObject
    Dim targetFolder As Folder
    Dim f As File
    Dim i As Long
    
    Set targetFolder = fso.GetFolder(ThisWorkbook.Path)
    i = 2 ' 2行目から書き出し開始
    
    ' ヘッダーを書き込み
    Range("A1:D1").Value = Array("ファイル名", "サイズ(KB)", "種類", "最終更新日")
    
    ' フォルダ内の全ファイルをループ
    For Each f In targetFolder.Files
        Cells(i, 1).Value = f.Name
        Cells(i, 2).Value = f.Size / 1024
        Cells(i, 3).Value = f.Type
        Cells(i, 4).Value = f.DateLastModified
        i = i + 1
    Next f
    
    Columns("A:D").AutoFit ' 列幅を自動調整
End Sub

まとめ

FSOを使えば、ファイルのメタデータに簡単にアクセスできます。

  • ファイル名や拡張子だけが欲しい場合は、.GetBaseName.GetExtensionName が便利。
  • サイズや更新日時など、より多くの情報が必要な場合は、まず.GetFileFileオブジェクトを取得し、そのプロパティを参照する。

これらの機能を使いこなすことで、ファイルの整理や、ログの記録、システム連携など、VBAでできることの幅が大きく広がります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次