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は公式ドキュメントにたどり着けるかどうかが鍵です。
今回のファイルシステムのクラス、ブラウザのクラス、Outlookのクラスの3つは3大よく使うOLEだと思いますので、これらの公式ドキュメントだけでも押さえておくと、いちいち調べなくて良いかも知れません。あるいは、よく使う部分は使い回せるように、インスタンスの生成までは共通のコードとして保存しておくと良いと思います*1。
FileSystemObjectの使い方 まとめ
以上、FileSystemObjectの使い方でした。ポイントとしては下記の通りです。
- VBAでファイルやフォルダを操作するのは結構大変なので、FileSystemObjectが便利
- OLEは公式ドキュメントまでたどり着けさえすれば大丈夫
- よく使うOLEはインスタンスを生成するところまでひとかたまりのコードとして保存しておく
<関連記事>
<ゆんの電子書籍>
ゆんの電子書籍はすべてkindle unlimitedで読み放題です!
*1:あとで使い回せるように部分的に汎用的に記述したひとかたまりのプログラムのことをスニペットと言います