【VBAリファレンス】VBAでファイル管理を自動化する!ファイルサイズと更新日時を取得する実務テクニック

スポンサーリンク

概要:VBAによるファイル管理の自動化

日々の業務において、特定のフォルダ内に格納された大量のファイルを整理したり、リスト化したりする作業は非常に煩雑です。特に、ファイル名だけでなく「ファイルサイズ」や「最終更新日時」といったメタデータが必要な場合、手作業でプロパティを確認するのは現実的ではありません。

VBAには、Windowsのファイルシステムに直接アクセスして、これらの情報を瞬時に取得する関数が備わっています。今回は、FileLen関数とFileDateTime関数を駆使し、フォルダ内の全ファイルの情報をExcelシート上に一括出力するプロフェッショナルなツールを作成する方法を解説します。この手法を習得すれば、ファイルサーバーの整理や、ドキュメント管理台帳の作成を数秒で完了させることが可能です。

詳細解説:FileLen関数とFileDateTime関数の仕組み

VBAでファイル情報を扱う際、最も基本的な構成要素となるのが「Dir関数」と今回紹介する「FileLen」「FileDateTime」の組み合わせです。

まず、FileLen関数についてです。この関数は引数に指定したファイルのサイズを「バイト単位」で返します。戻り値はLong型ですが、ファイルが2GBを超えるような巨大な場合には注意が必要です。実務レベルのドキュメント管理であれば、この関数で取得した値を1024で割ることで、KB(キロバイト)単位に換算して表示するのが一般的です。

次に、FileDateTime関数です。これは、指定したファイルの「最終更新日時」を日付型(Date型)で返します。OSが記録しているタイムスタンプをそのまま取得できるため、バックアップの整合性チェックや、古いファイルの特定を行う際に極めて有効です。

これらの関数をDir関数と組み合わせることで、「フォルダ内の全ファイルをループ処理し、一つずつ情報を抽出する」というロジックが完成します。Dir関数は、ワイルドカード(*)を使用することで特定の拡張子のみを抽出することも可能であり、柔軟性の高いファイル管理ツールを構築するための強力なエンジンとなります。

サンプルコード:ファイルリスト一括作成ツール

以下に、指定したフォルダ内の全ファイルを走査し、ファイル名、サイズ(KB)、更新日時をExcelシートに書き出すサンプルコードを提示します。


Sub CreateFileList()
    Dim folderPath As String
    Dim fileName As String
    Dim row As Long
    Dim fileSize As Long
    Dim fileDate As Date
    
    ' フォルダパスを指定(末尾に必ず\を付ける)
    folderPath = "C:\SampleFolder\"
    
    ' シートの初期化
    Cells.Clear
    Range("A1:C1").Value = Array("ファイル名", "サイズ(KB)", "最終更新日時")
    row = 2
    
    ' Dir関数でファイルを取得
    fileName = Dir(folderPath & "*.*")
    
    Application.ScreenUpdating = False
    
    Do While fileName <> ""
        ' ファイルサイズの取得とKB換算
        fileSize = FileLen(folderPath & fileName) / 1024
        
        ' 更新日時の取得
        fileDate = FileDateTime(folderPath & fileName)
        
        ' セルへの出力
        Cells(row, 1).Value = fileName
        Cells(row, 2).Value = fileSize
        Cells(row, 3).Value = fileDate
        
        row = row + 1
        ' 次のファイルを取得
        fileName = Dir()
    Loop
    
    ' 書式の調整
    Columns("A:C").AutoFit
    Application.ScreenUpdating = True
    
    MsgBox "ファイルリストの作成が完了しました。", vbInformation
End Sub

このコードのポイントは、`Application.ScreenUpdating = False` を使用して、書き込み中の画面描画を停止している点です。ファイル数が数千件に及ぶ場合、この一行があるだけで処理速度が劇的に向上します。

実務アドバイス:エラーハンドリングと拡張のヒント

実務でこのコードを使用する際、考慮すべき点がいくつかあります。

第一に「エラーハンドリング」です。例えば、読み取り専用ファイルや、アクセス権限のないシステムファイルに遭遇した場合、VBAはエラーで停止してしまいます。`On Error Resume Next` をループ内で適切に利用し、スキップする処理を組み込むことで、堅牢なツールに仕上げることができます。

第二に「拡張性」です。今回のコードではファイル名のみを取得していますが、`FileSystemObject (FSO)` を使用すれば、ファイルの作成日時や属性(隠しファイルかどうか)も取得可能です。Dir関数よりも処理が少し重くなる傾向がありますが、より高度な操作が必要な場合は、FSOへの移行を検討してください。

第三に「検索条件の最適化」です。特定の拡張子(例:.xlsxや.pdf)のみを抽出したい場合は、`Dir(folderPath & “*.xlsx”)` のようにワイルドカードを活用してください。これにより、不要なファイルを含めずにリストを作成でき、後のデータ加工が非常に楽になります。

また、リスト化したデータに対して「サイズが10MB以上のファイルを赤字にする」といった条件付き書式をVBAで自動設定するようにコードを拡張すれば、視認性が飛躍的に向上し、誰が見ても分かりやすい管理台帳が完成します。

まとめ:VBAで「管理の自動化」を実現せよ

VBAを使用したファイル一覧の作成は、単純な作業に見えて、実は「業務効率化の第一歩」として非常に重要なスキルです。手作業によるミスを排除し、正確なデータに基づいた管理を行うことは、組織全体の生産性向上に直結します。

今回解説したFileLen関数とFileDateTime関数は、VBAのファイル操作における基礎体力とも呼べる機能です。まずはこのサンプルコードをそのまま実行し、自分のPC内のフォルダで試してみてください。その後、自分の業務に合わせて「特定の拡張子だけを抽出する」「指定サイズ以上のファイルだけをリストアップする」といったカスタマイズを加えていくことで、あなたのExcelスキルは飛躍的に向上します。

自動化の最大のメリットは、一度ツールを作れば、その後は永久的にその作業から解放されることです。ぜひこの技術を武器にして、より創造的で付加価値の高い業務に時間を割けるよう、日々の自動化に取り組んでみてください。VBAは、あなたの努力を裏切りません。

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