
― 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()では面倒だった情報取得が一瞬です。
📁 サブフォルダを取得する
階層構造の処理は FSO の得意分野です。
🔄 Dir() と FSO の使い分け
| 項目 | Dir() | FSO |
|---|---|---|
| 手軽さ | ◎ | ○ |
| 初心者向け | ◎ | ○ |
| 情報量 | △ | ◎ |
| フォルダ操作 | △ | ◎ |
| 可読性 | △ | ◎ |
目安
-
単純な一覧取得 → Dir()
-
本格的なファイル・フォルダ管理 → FSO
🪄 実務でよくある使い道
-
フォルダがなければ作成して保存
-
日付別フォルダを自動生成
-
古いフォルダ・ファイルの削除
-
ファイルサイズで振り分け
-
バックアップ用フォルダ構築
👉 業務自動化との相性は抜群です。
✨ まとめ
-
FileSystemObject(FSO)は ファイル操作の上位互換
-
フォルダ・ファイルを「オブジェクト」として扱える
-
Dir()に慣れたら、次のステップとして必ず役立つ