ゆんの業務改善ブログ

①生産性向上 ②業務改善 ③自動化 について情報発信しています。VBAプログラムは本当の初心者から他のアプリケーションを呼び出して使う上級者的な使い方まで幅広いレベルで解説していきます。

VBA FileSystemObjectを使ってファイルやフォルダを操作する

VBAでファイルやフォルダを取り扱おうとすると、様々なメソッドを駆使する必要があり、なかなか大変です。今回はファイルやフォルダの取り扱いを一手に引き受けるコンピュータのファイルシステムを利用して、VBAで簡単にファイルやフォルダの取り扱いを行う方法を解説します。


目次

FileSystemObjectを使ってファイルやフォルダを操作する

早速、書き方について解説して行きます。

OLEを使う

他のプログラムの機能を借りてくるのがAPI、クラスを借りてくるのがOLEオートメーション(以下、OLE)です。今回はファイルシステムのクラスを借りてくるのでOLEです。OLEには事前バインディングと実行時バインディングの2つの方法があります。今回は実行時バインディングでサンプルコードを作成します。

サンプルコード

借りてくるクラス名を調べるためには、公式ドキュメントを参照します。公式ドキュメントによると、構文の所に、Scripting.FileSystemObject、と書いてありその下に、メソッドが色々と解説されています。それに従ってインスタンスの生成とメソッドを利用すればOKです。

Sub SampleFolderというフォルダを作成するサンプル()

    Dim fso As Object 'インスタンスを生成するための適当な変数を用意する
    
    Set fso = CreateObject("Scripting.FileSystemObject") 'インスタンスの生成
    fso.CreateFolder ("C:\SampleFolder") ’インスタンスを利用

End Sub

無事にCドライブ直下にSampleFolderというフォルダを作成することができました。せっかくなので別のメソッドも試してみます。前項のプログラムにフルパスを生成するBuildPathメソッドを加えて新たなフルパスを取得しました。そのフルパスを使って新たなエクセルファイルを保存します。

Sub フォルダ生成しその中にファイルを保存するサンプル()

    Dim fso As Object
    Dim fullpath As String
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    fso.CreateFolder ("C:\SampleFolder")
    fullpath = fso.BuildPath("C:\SampleFolder", "samplefile.xlsx")
    
    Workbooks.Add
    ActiveWorkbook.SaveAs Filename:=fullpath
    
End Sub

プログラム自体は難しくありませんね。OLEは公式ドキュメントにたどり着けるかどうかが鍵です。

FileSystemObjectのBuildPathメソッドを利用した
新しく作成したフォルダの中に新しいエクセルファイルを追加した

今回のファイルシステムのクラス、ブラウザのクラス、Outlookのクラスの3つは3大よく使うOLEだと思いますので、これらの公式ドキュメントだけでも押さえておくと、いちいち調べなくて良いかも知れません。あるいは、よく使う部分は使い回せるように、インスタンスの生成までは共通のコードとして保存しておくと良いと思います*1

FileSystemObjectの使い方 まとめ

以上、FileSystemObjectの使い方でした。ポイントとしては下記の通りです。

  • VBAでファイルやフォルダを操作するのは結構大変なので、FileSystemObjectが便利
  • OLEは公式ドキュメントまでたどり着けさえすれば大丈夫
  • よく使うOLEはインスタンスを生成するところまでひとかたまりのコードとして保存しておく

<関連記事>

<お知らせ>
Excel VBAでクラスやオブジェクトの概念と使い方を丁寧に解説し、ワンランク上の実力を目指すガイドが電子書籍になりました。この本で本物の実力を身に付けて一皮むけてみませんか?
books.rakuten.co.jp

*1:あとで使い回せるように部分的に汎用的に記述したひとかたまりのプログラムのことをスニペットと言います