こんにちは、blueです。
前回はFileSystemObject(FSO)を使用する前のファイル(フォルダ)パスの取得について説明しました。
前回の記事はこちら

今回からは実際にFSOについて説明します。
FSOが使えるようになるとファイルの名前変更やコピー、移動などエクスプローラー上で行う操作はすべて可能になります。
難しそうに見えるかもしれませんがおおよその手順は決まっています。
大事な個所を絞って説明していきますのですべて読んでいただければきっと使えるようになります。
Excel内でのVBA操作から一歩踏み出て外の機能が使えるようになっていきましょう。
FSOを使用する手順
FSOを使用してファイル(フォルダ)を操作する手順は以下のようになります。
なおここでいうファイルやフォルダの操作はファイルを開くとか保存するとかなどExcel内で操作できる内容ではなく、ファイルにアクセスして操作する手順になります。
- 対象となるファイルあるいはフォルダパスを取得する
- 対象のファイル、フォルダパスに対するオブジェクトを取得する
- オブジェクトに対してメソッドやプロパティを使用する
今回は2について説明します。
まずはFSOって?
FileSystemObjectとはWindowsのファイルシステムにアクセスするためのオブジェクトです。
これだけだとわかりにくいですが以下のようにWindowsのエクスプローラーを操作するイメージです。
いくつか例を紹介します。
エクスプローラーでは階層構造のファイルやフォルダを見たり・・・

ファイルの名前や基本情報を見たり・・・

ファイルに対してアクション(メソッド)やより詳細な情報(プロパティ)を確認したりできます。

これらの機能はFSOを生成(インスタンス化)するとすべて(!)使えるようになります。
今回はその方法について説明します。
FSOを取得してみる
FSOはオブジェクトの為取得が可能です。
実際のファイル取得に行く前にまずはFSOを取得してみます。
FSOをインスタンス化するには以下の2通りがあります
- 参照設定を行った後 Newキーワードで生成させる
- CreateObjectで実行時に生成させる
それぞれのコードは以下になります。
Sub FileSystemObject1()
'参照設定を行う方法
Dim FSO As Scripting.FileSystemObject
Set FSO = New FileSystemObject
End Sub
Sub FileSystemObject2()
'参照設定を行わない方法
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
End Sub
どちらも変数をセットした後オブジェクトとしてセットしています。
なお参照設定とはVBAの環境で他の機能を使うためのものです。
詳細は割愛しますが以下の方法で設定が可能です。

参照設定を行う場合は事前に設定を行っているので以降自動補完機能が働き便利です(事前バインディングという)。
一方参照設定を行わない場合は プログラム実行時にしか取得できないのでコードを書く際に自動補完機能が働きません(実行時バインディング、遅延バインディングという)。参照設定をしていないPCなどで実行するときに使いますが通常であれば参照設定を行う方がコーディングも楽になります。
次にこの状態でFSOの中身を見てみます。
コードの最後に「Stop」を入れた以下の状態で実行してみてください。
Sub FileSystemObject1()
'参照設定を行う方法
Dim FSO As Scripting.FileSystemObject
Set FSO = New FileSystemObject
Stop
End Sub
この状態でローカルウィンドウを覗くとFSOの中身が見れます。
以下に動画を用意していますので確認してみてください。
(なお細かいオブジェクトやプロパティは次回以降で説明しますので今は理解できなくてもOKです)
動画は以下のWindowsのフォルダの情報までの階層を確認しています。

このようにFSOを取得するとWindows内にあるファイル情報をすべて(!)一瞬で(!)取得できるようになります。
あとはメソッドやプロパティなどで必要な情報を取得するだけなので、FSOの階層構造を理解できれば後が楽になります。
(なお、中を細かく見るとエクスプローラー上で見るのと異なるファイルやフォルダが確認できることがあります。これは隠しファイルやシステムファイルであり、通常のエクスプローラーで表示するためにはフォルダオプションでの設定が必要です。以下に写真のみ載せておきます)

まとめ
今回はFSOの取得方法について説明しました。
FSOを取得するとWindows内のファイルのすべての情報を扱えるようになります。
次回はFSOの中身について説明していきます。
コメント