FileSystemObject

オブジェクト

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)

定数名内容
ForReading1読み取り専用
ForWriting2書き込み専用
ForAppending8末尾追加

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 などで一覧取得
安全性存在確認とエラーハンドリングが重要
タイトルとURLをコピーしました