Django Girls and Boys 備忘録

Python、Selenium、Django、java、iPhoneアプリ、Excelマクロなどで気付いたこと、覚えておきたいことなどを載せていきます。

【Excelマクロ入門】FileSystemObject(FSO)でフォルダ操作を始めよう

― Dir()の次に覚えたい“本格派”ファイル操作 ―

Excelマクロでファイルやフォルダを扱うとき、
多くの人がまず Dir() 関数を使います。

でも、こんな場面で困ったことはありませんか?

  • フォルダを作成・削除したい

  • サブフォルダをまとめて処理したい

  • ファイルのサイズや更新日時も取りたい

  • 処理をもっと読みやすく書きたい

そんなときに登場するのが
FileSystemObject(通称:FSO) です。

Dir() より少しだけ本格的。
でも、慣れると 「ファイル操作はFSO一択」 になる可能性があります。


🔍 FileSystemObject(FSO)とは?

FSO は、
ファイル・フォルダ・ドライブをオブジェクトとして扱える仕組みです。

  • フォルダを「Folder」オブジェクトとして操作

  • ファイルを「File」オブジェクトとして操作

  • プロパティ(名前・サイズ・更新日など)に直接アクセス

👉 「文字列」ではなく「モノ」として扱えるのが最大の特徴です。


🧩 まずは基本形:FSOを使う準備

宣言と作成

Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")

 

※ 初心者向けには 参照設定なしで使えるこの書き方がおすすめです。


📁 フォルダが存在するか確認する

Sub CheckFolder()

    Dim fso As Object

    Set fso = CreateObject("Scripting.FileSystemObject")
    If fso.FolderExists("C:\Test") Then
        MsgBox "フォルダは存在します"
    Else
        MsgBox "フォルダは存在しません"
    End If

End Sub

 

👉 Dir() より 意味が直感的で読みやすい のが魅力です。


➕ フォルダを作成する

Sub CreateFolder()

    Dim fso As Object

    Set fso = CreateObject("Scripting.FileSystemObject")
    If Not fso.FolderExists("C:\Test") Then
        fso.CreateFolder "C:\Test"
    End If

End Sub

 

  • 存在チェック

  • なければ作成

この流れは 実務で超頻出 です。


❌ フォルダを削除する(注意!)

Sub DeleteFolder()

    Dim fso As Object

    Set fso = CreateObject("Scripting.FileSystemObject")
    If fso.FolderExists("C:\Test") Then
        fso.DeleteFolder "C:\Test"
    End If

End Sub
 
 

フォルダ内のファイルもすべて削除されます
本番環境では十分注意してください。


📂 フォルダ内のファイル一覧を取得する

Sub ListFiles()

    Dim fso As Object
    Dim folder As Object
    Dim file As Object

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set folder = fso.GetFolder("C:\Test")
    For Each file In folder.Files
        Debug.Print file.Name
    Next file

End Sub

 

取得できる情報の例

file.Name        ' ファイル名
file.Path        ' フルパス
file.Size        ' サイズ(バイト)
file.DateLastModified ' 更新日時

 

👉 Dir()では面倒だった情報取得が一瞬です。


📁 サブフォルダを取得する

Sub ListSubFolders()
 
    Dim fso As Object
    Dim folder As Object
    Dim subFolder As Object
 
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set folder = fso.GetFolder("C:\Test")
    For Each subFolder In folder.SubFolders
        Debug.Print subFolder.Name
    Next subFolder
 
End Sub

 

階層構造の処理は FSO の得意分野です。


🔄 Dir() と FSO の使い分け

項目 Dir() FSO
手軽さ
初心者向け
情報量
フォルダ操作
可読性

目安

  • 単純な一覧取得 → Dir()

  • 本格的なファイル・フォルダ管理 → FSO


🪄 実務でよくある使い道

  • フォルダがなければ作成して保存

  • 日付別フォルダを自動生成

  • 古いフォルダ・ファイルの削除

  • ファイルサイズで振り分け

  • バックアップ用フォルダ構築

👉 業務自動化との相性は抜群です。


✨ まとめ

  • FileSystemObject(FSO)は ファイル操作の上位互換

  • フォルダ・ファイルを「オブジェクト」として扱える

  • Dir()に慣れたら、次のステップとして必ず役立つ