Excel-VBAでフォルダやファイルを操作する方法を3回の記事にわけて紹介します。
(1)FileSytemObjectを使用する準備 ― 今回の記事
(2)フォルダ内にあるサブフォルダとファイルを操作する
(3)すべての下位フォルダ内のファイルを操作する
最終的にはあるフォルダの中にあるサブフォルダ内やさらにその下位にあるサブフォルダ内にあるすべてのファイルを操作する方法を紹介します。
方法としてDir関数を用いる方法もありますが、今回はFileSystemObjectを用いた方法を紹介します。
1回目の今回はFileSytemObjectを使うための準備について紹介します。
FileSystemObjectを使うための準備について
FileSystemObjectはファイルやフォルダを操作するためのオブジェクトですが、Excel-VBAの標準オブジェクトではなく外部ライブラリのオブジェクトになるため、VBAで使うための準備が必要になります。
外部ライブラリのオブジェクトを使うためにはそのライブラリを参照するバインディングをする必要があります。バインディングには「事前バインディング」と「実行時バインディング」の2通りの方法があり、どちらかの方法を実施すればよいです。
事前バインディング(参照設定をする)
事前バインディングは使用するライブラリを参照設定であらかじめ設定しておく方法です。
参照設定はVBEの「ツール」→「参照設定」で表示されるライブラリファイルから参照するライブラリを選択して適用します。
FileSystemObjectを使用するにはここで「Microsoft Scripting Runtime」を選択します。
参照設定をした場合の変数の宣言およびオブジェクトの作成のコードは次のようにします。
Dim fso As FileSystemObject ’//変数の宣言
Set fso = New FileSystemObject ’//オブジェクトの作成
参照設定をして事前バインディングをした場合はFileSystemObjectを操作して得られたファイルオブジェクトやフォルダオブジェクトを格納する変数を宣言するときも専用のオブジェクト型で宣言することができます。
Dim sFolder As Folder ’//フォルダオブジェクトを格納する変数
Dim sFile As File ’//ファイルオブジェクトを格納する変数
実行時バインディング(CreateObject関数を使う)
事前バインディングのように外部ライブラリへの参照をあらかじめ設定せずに、マクロを実行したときに外部ライブラリのオブジェクトを作成するにはCreateObject関数を使います。
変数の宣言はObject型で宣言しておき、その変数にCreateObject関数で作成したオブジェクトを格納します。コードは次のようになります。
Dim fso As Object
Set fso = CreateObject(“Scripting.FileSystemObject”)
この場合、ファイルオブジェクトやフォルダオブジェクトを格納する変数の宣言にも専用の型は使えないのでいずれもObject型で宣言することになります。
Dim sFolder As Object
Dim sFile As Object
事前バインディングと実行時バインディングの違い
事前バインディングと実行時バインディングのどちらかで実施すればよいのですが、どちらが優れているか一概には言えません。それぞれにメリットとデメリットがあります。
メリット | デメリット | |
事前バインディング | インテリセンスが利用できる 処理速度が若干速い | 汎用性にやや難あり |
実行時バインディング | 汎用性が高い | インテリセンスが利用できない 処理速度が比較的遅い |
事前バインディングをすることのメリットとして一番にあげられるのはインテリセンス(入力補完)が利用できることでしょう。自動メンバ表示が使えるのでコードの入力作業が効率的になり、スペルミスも予防できます。また、事前にライブラリを特定しているので処理速度も若干ですが事前バインディングのほうが早くなります。
デメリットとしては複数のPCで使用するときなど、それぞれのアプリケーションのバージョン違いなどによって支障がでる場合があり、やや汎用性に欠けることがあげられます。
逆に実行時バインディングではそのような心配はないので汎用性が高いことがメリットとなります。デメリットとしてはインテリセンスが利用できない、処理速度が事前バインディングと比較すると若干遅いことでしょうか。
個人利用目的など特定のPC環境下で使用するマクロを作成するなら事前バインディングをしてインテリセンス利用のメリットを享受したほうがいいでしょう。
会社などで複数のPC環境で汎用的に使用するマクロとして作成するなら実行時バインディングで作成しておくことで余計なトラブルを回避できます。
コード作成時は事前バインディングで作成し、完成してから実行時バインディングのコードに書き換えるという方法もあります。
事前バインディングで作成したマクロには「参照設定が必要」である旨をコメントで記しておくとよいでしょう。
まとめ
今回はFileSytemObjectを使用するための準備について紹介しました。次回からFileSytemObjectを使用してフォルダとファイルを操作する方法を紹介していきます。
(1)FileSytemObjectを使用する準備 ― 今回の記事
(2)フォルダ内にあるサブフォルダとファイルを操作する
(3)すべての下位フォルダ内のファイルを操作する
コメント