1. はじめに
VBAでファイルやフォルダを操作するには、標準のDir
関数やKill
関数などもありますが、より強力で柔軟な方法として、FileSystemObject(FSO)が用意されています。
これは Microsoft が提供する Scripting Runtime ライブラリの一部で、以下のような高度なファイルシステム操作が可能です。
2. FileSystemObject(FSO)とは?
FileSystemObject
は、ファイルやフォルダを操作するためのオブジェクトベースの機構です。Scripting.FileSystemObject
クラスとして提供され、以下のような機能を持ちます
主な用途
分類 | 内容 |
---|---|
ファイル操作 | 作成・コピー・削除・名前変更・読み書き |
フォルダ操作 | 作成・削除・存在確認・一覧取得 |
ドライブ情報 | ドライブの種類・空き容量・ファイルシステム情報など |
3. 使用前の準備
3-1. 参照設定(推奨)
VBE(Visual Basic Editor)で、次のように参照設定を行います:
[ツール] > [参照設定] > “Microsoft Scripting Runtime” にチェックを入れる
これにより、型宣言や補完機能が使用可能になります。
3-2. インスタンス作成
Dim fso As FileSystemObject
Set fso = New FileSystemObject
※参照設定をしない場合:
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
4. FileSystemObject の主要メソッドとプロパティ
メソッド/プロパティ | 説明 |
---|---|
CreateTextFile | 新しいテキストファイル作成 |
OpenTextFile | 既存のテキストファイルを開く |
GetFile / GetFolder | ファイル/フォルダオブジェクト取得 |
FileExists / FolderExists | 存在確認 |
DeleteFile / DeleteFolder | 削除 |
CopyFile / CopyFolder | コピー |
MoveFile / MoveFolder | 移動 |
GetDrive | ドライブ情報取得 |
5. ファイル操作の実例
5-1. ファイルの存在確認と削除
If fso.FileExists("C:\Temp\test.txt") Then
fso.DeleteFile "C:\Temp\test.txt"
End If
5-2. ファイルのコピー
fso.CopyFile "C:\Temp\source.txt", "D:\Backup\source.txt"
5-3. ファイルの読み書き
Dim ts As TextStream
' 書き込み
Set ts = fso.CreateTextFile("C:\Temp\log.txt", True)
ts.WriteLine "ログ出力: " & Now
ts.Close
' 読み込み
Set ts = fso.OpenTextFile("C:\Temp\log.txt", ForReading)
Do Until ts.AtEndOfStream
Debug.Print ts.ReadLine
Loop
ts.Close
6. フォルダ操作の実例
6-1. フォルダの存在確認と作成
If Not fso.FolderExists("C:\Data") Then
fso.CreateFolder "C:\Data"
End If
6-2. フォルダ内ファイルの一覧取得
Dim folder As Folder
Dim file As File
Set folder = fso.GetFolder("C:\Temp")
For Each file In folder.Files
Debug.Print file.Name, file.Size, file.DateCreated
Next
7. ドライブ情報の取得
Dim drv As Drive
Set drv = fso.GetDrive("C:")
Debug.Print "空き容量:" & drv.FreeSpace / 1024 ^ 2 & " MB"
Debug.Print "ファイルシステム:" & drv.FileSystem
8. テキストファイル読み書きの詳細
TextStream
オブジェクトを用いてファイルにアクセスします。
モード一覧(OpenTextFile)
定数名 | 値 | 内容 |
---|---|---|
ForReading | 1 | 読み取り専用 |
ForWriting | 2 | 書き込み専用 |
ForAppending | 8 | 末尾追加 |
9. FSO使用時のエラー対策
ファイルやフォルダが存在しないときにエラーにならないように、事前確認が重要です:
If Not fso.FileExists("C:\Temp\data.txt") Then
MsgBox "ファイルが存在しません"
Exit Sub
End If
または、On Error Resume Next
を使ってエラーを無視し、後で処理を分岐させることも可能です。
10. FileSystemObjectを使うメリット
比較対象 | 特徴 |
---|---|
Dir , Kill 等 | シンプルだが柔軟性が低い |
FileSystemObject | オブジェクト指向で柔軟、情報も豊富 |
メリットまとめ
- ファイルのサイズや更新日時など多くの属性にアクセス可能
- フォルダやドライブの情報も取得できる
- テキストファイルの入出力が簡単
- 再利用性・可読性が高い
11. よくある用途例
- ファイルのバックアップ処理
- フォルダ内ファイルの一覧出力(CSVなど)
- ログファイルの生成
- ファイルの自動整理(移動/削除)
- 大量のファイルの存在確認やフィルタ処理
12. まとめ
項目 | 内容 |
---|---|
オブジェクト名 | FileSystemObject (FSO) |
所属 | Microsoft Scripting Runtime |
主な機能 | ファイル/フォルダ/ドライブの操作 |
使用開始の手順 | Set fso = New FileSystemObject |
テキストファイル処理 | CreateTextFile , OpenTextFile など |
コレクション | .Files , .SubFolders などで一覧取得 |
安全性 | 存在確認とエラーハンドリングが重要 |