2019.08.06この記事は約5分で読めます。Excel-VBAでフォルダやファイルを操作する方法を3回の記事にわけて紹介します。今回の記事(2)フォルダ内にあるサブフォルダとファイルを操作する(3)すべての下位フォルダ内のファイルを操作する最終的にはあるフォルダの中にあるサブフォルダ内やさらにその下位にあるサブフォルダ内にあるすべてのファイルを操作する方法を紹介します。方法としてDir関数を用いる方法もありますが、今回はFileSystemObjectを用いた方法を紹介します。1回目の今回はFileSytemObjectを使うための準備について紹介します。目次FileSystemObjectを使うための準備について事前バインディング(参照設定をする)実行時バインディング(CreateObject関数を使う)事前バインディングと実行時バインディングの違いまとめFileSystemObjectを使うための準備についてFileSystemObjectはファイルやフォルダを操作するためのオブジェクトですが、Excel-VBAの標準オブジェクトではなく外部ライブラリのオブジェクトになるため、VBAで使うための準備が必要になります。外部ライブラリのオブジェクトを使うためにはそのライブラリを参照するバインディングをする必要があります。バインディングには「事前バインディング」と「実行時バインディング」の2通りの方法があり、どちらかの方法を実施すればよいです。事前バインディング(参照設定をする)事前バインディングは使用するライブラリを参照設定であらかじめ設定しておく方法です。参照設定はVBEの「ツール」→「参照設定」で表示されるライブラリファイルから参照するライブラリを選択して適用します。Runtime」を選択します。参照設定をした場合の変数の宣言およびオブジェクトの作成のコードは次のようにします。FileSystemObject」と記すことも可能ですが、実はこの記述では変数の宣言と同時にオブジェクトを作成しているわけではありません。この記述だと変数がコードの中で使用されるたびに「オブジェクトが生成されているかを判別」し「生成されていなければ生成する」という処理が毎回行われます。コードの記述が一行にまとまって簡潔になったようにみえて実はプログラムとしては毎回確認処理が入るという無駄が発生してしまうのであまりお勧めできません。参照設定をして事前バインディングをした場合はFileSystemObjectを操作して得られたファイルオブジェクトやフォルダオブジェクトを格納する変数を宣言するときも専用のオブジェクト型で宣言することができます。実行時バインディング(CreateObject関数を使う)事前バインディングのように外部ライブラリへの参照をあらかじめ設定せずに、マクロを実行したときに外部ライブラリのオブジェクトを作成するにはCreateObject関数を使います。変数の宣言はObject型で宣言しておき、その変数にCreateObject関数で作成したオブジェクトを格納します。コードは次のようになります。CreateObject(“Scripting.FileSystemObject”)この場合、ファイルオブジェクトやフォルダオブジェクトを格納する変数の宣言にも専用の型は使えないのでいずれもObject型で宣言することになります。Object事前バインディングと実行時バインディングの違い事前バインディングと実行時バインディングのどちらかで実施すればよいのですが、どちらが優れているか一概には言えません。それぞれにメリットとデメリットがあります。インテリセンスが利用できない処理速度が比較的遅い事前バインディングをすることのメリットとして一番にあげられるのはインテリセンス(入力補完)が利用できることでしょう。自動メンバ表示が使えるのでコードの入力作業が効率的になり、スペルミスも予防できます。事前にライブラリを特定しているので処理速度も若干ですが事前バインディングのほうが早くなります。デメリットとしては複数のPCで使用するときなど、それぞれのアプリケーションのバージョン違いなどによって支障がでる場合があり、やや汎用性に欠けることがあげられます。逆に実行時バインディングではそのような心配はないので汎用性が高いことがメリットとなります。デメリットとしてはインテリセンスが利用できない、処理速度が事前バインディングと比較すると若干遅いことでしょうか。個人利用目的など特定のPC環境下で使用するマクロを作成するなら事前バインディングをしてインテリセンス利用のメリットを享受したほうがいいでしょう。会社などで複数のPC環境で汎用的に使用するマクロとして作成するなら実行時バインディングで作成しておくことで余計なトラブルを回避できます。コード作成時は事前バインディングで作成し、完成してから実行時バインディングのコードに書き換えるという方法もあります。事前バインディングで作成したマクロには「参照設定が必要」である旨をコメントで記しておくとよいでしょう。まとめ今回はFileSytemObjectを使用するための準備について紹介しました。次回からFileSytemObjectを使用してフォルダとファイルを操作する方法を紹介していきます。以前Excel-VBAを使ってExcelを便利にする小技を動画で紹介しました。動画の前半...Excel-VBA【Excel】令和1年を令和元年表記に変える方法MicrosoftはwindowsおよびOfficeで更新アップデートによって新元号の令和に対応しました。このアップデート後であればExcelでも和暦で令和を表記させることができます。デフォルトでは令和1年と表記さ...Excel-VBA【VBAでフォルダ/ファイル操作】(3)すべての下位フォルダ内のファイルを操作するExcel-VBAでフォルダやファイルを操作する方法を3回の記事にわけて紹介します。VBAのプロパティについてVBAを学習している初心者の方の多くが「Rangeプロパティ」という言葉を聞くと困惑してしまうと思います。「Rangeはオブジェクトと習ったのにRangeプロパティって何?」と疑問に思うことでしょう。なかには「Rangeは...Excel-VBA公開マクロの保存方法(用途別)当サイトのVBAマクロ紹介記事などでプログラムのソースコードを公開する場合があります。そのプログラムをコピーしてマクロとして保存する方法の手順を紹介します。ここでは一般的な方法として「標準モジュール」に保存する方法を紹介し...Excel-VBA【VBAでフォルダ/ファイル操作】(2)フォルダ内にあるサブフォルダとファイルを操作するExcel-VBAでフォルダやファイルを操作する方法を3回の記事にわけて紹介します。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。ツール作成、メンテナンスをしています。このブログではVBA関連を中心に初心者にもわかりやすい解説や技術情報を発信していきます。ツール作成、メンテナンスをしています。このブログではVBA関連を中心に初心者にもわかりやすい解説や技術情報を発信していきます。人気記事VBAでPDF出力をする方法(ExportAsFixedFormatメソッド)2019.10.02VBAで今日の日付を検索する方法2019.07.17選択セルの行と列をハイライト表示する方法2019.06.072019.07.03【VBAでフォルダ/ファイル操作】(3)すべての下位フォルダ内のファイルを操作する2019.08.07【Excel】更新プログラム未対応で令和表示にする2019.05.092019.06.27タイトルとURLをコピーしました。