【Excel VBA】FileSystemObject(FSO)でファイル操作を始めるための準備

VBAでファイルの有無を確認したり、フォルダをコピーしたり、テキストファイルの内容を読み書きしたりと、高度なファイルシステム操作を行いたい場合、**FileSystemObject(FSO)**という機能を利用するのが一般的です。

FSOは、VBAにもともと備わっているMkDirFileCopyといった命令よりもはるかに高機能で、柔軟なファイル・フォルダ操作を実現します。

この記事では、FSOをVBAで利用可能にするための「おまじない」とも言える、オブジェクトを生成する2つの準備方法を解説します。


目次

FileSystemObjectのオブジェクトモデル

FSOを使いこなすには、まずその構造を理解するのが近道です。FSOは、以下のような階層的なオブジェクトで構成されています。

  • FileSystemObject: すべての操作の起点となる、最も重要な親オブジェクト。
    • Drivesコレクション: PCに接続されている全ドライブの集まり。
      • Driveオブジェクト: 個々のドライブ(Cドライブなど)。
    • Foldersコレクション: ある場所にある全フォルダの集まり。
      • Folderオブジェクト: 個々のフォルダ。
    • Filesコレクション: あるフォルダにある全ファイルの集まり。
      • Fileオブジェクト: 個々のファイル。
    • TextStreamオブジェクト: テキストファイルの読み書きを専門に行うオブジェクト。

まずは、親となるFileSystemObjectオブジェクトを生成できなければ、何も始まりません。


FSOオブジェクトを生成する2つの方法

FSOオブジェクトを生成するには、「レイトバインディング」と「アーリーバインディング」という2つの方法があります。

方法1:レイトバインディング (CreateObjectを使う)

事前の準備が不要で、手軽に利用できる方法です。

Sub PrepareFSO_LateBinding()
    ' 変数を宣言します
    Dim fso As Object
    
    ' CreateObject関数で、FSOオブジェクトを生成します
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' 生成できたかを確認
    If Not fso Is Nothing Then
        MsgBox "FileSystemObjectが正常に生成されました。(レイトバインディング)"
        ' ここに、fsoを使ったファイル操作のコードを記述していく
    End If
    
    ' オブジェクトを解放
    Set fso = Nothing
End Sub
  • 長所: 事前の「参照設定」が不要なため、コードを記述すればすぐに使えます。
  • 短所: VBAエディタの入力補完(IntelliSense)が効かないため、メソッド名などを正確に覚えておく必要があります。

方法2:アーリーバインディング (Newを使う – 推奨)

VBAに「これからFSOという機能を使いますよ」と事前に教えてあげる方法です。一手間かかりますが、コードが書きやすくなるなど多くのメリットがあるため、こちらの方法を強く推奨します。

【重要】事前準備:参照設定

  1. VBE(Alt+F11)を開き、メニューの ツール > 参照設定 をクリックします。
  2. 一覧の中から**「Microsoft Scripting Runtime」**を探し、チェックを入れて「OK」をクリックします。

完成したVBAコード

'参照設定: Microsoft Scripting Runtime
Sub PrepareFSO_EarlyBinding()
    ' 変数を宣言します
    Dim fso As FileSystemObject
    
    ' Newキーワードで、FSOオブジェクトを生成します
    Set fso = New FileSystemObject
    
    ' 生成できたかを確認
    If Not fso Is Nothing Then
        MsgBox "FileSystemObjectが正常に生成されました。(アーリーバインディング)"
        ' ここに、fsoを使ったファイル操作のコードを記述していく
    End If
    
    ' オブジェクトを解放
    Set fso = Nothing
End Sub
  • 長所: 入力補完が完全に機能するため、fso.と入力すると、使えるメソッドやプロパティの一覧が表示され、コーディングが非常に楽になります。また、処理速度もレイトバインディングより若干高速です。
  • 短所: 事前に参照設定を行う必要があります。

まとめ

方法事前準備入力補完推奨度
レイトバインディング不要効かない
アーリーバインディング参照設定が必要効く高(強く推奨)

Google スプレッドシートにエクスポート

結論として、これからFSOを使った開発を始めるのであれば、最初に**「Microsoft Scripting Runtime」への参照設定**を行い、アーリーバインディングでコーディングを進めるのが最も効率的で間違いのない方法です。

この準備さえできれば、ファイルの存在確認、コピー、移動、削除、テキストファイルの読み書きなど、VBAでできることの幅が大きく広がります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次