みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
エクセルVBAでFileSystemオブジェクトを使ってファイルやフォルダの操作をする方法についてシリーズでお伝えしています。
いや~、FileSystemオブジェクト…便利ですね。スマートにファイルやフォルダを操作できます。
前回は以下の記事で、フォルダの存在を判定してなければ作成する方法をお伝えしました。
今回は、ファイル一覧を出力する方法についてお伝えします。
フォルダをゲットして、その中のファイルをコレクションとしてゲットして、For Eachで回して、ファイル名を出力する…こんなダンドリです。
では、エクセルVBAでFileSystemオブジェクトを使ってファイル一覧を出力する方法、行ってみましょう!
フォルダ内のファイル一覧を取得する
では早速ですが、エクセルVBAでFileSystemオブジェクトを使ってファイル一覧を出力するプログラムを紹介します。
こちらです!
Sub フォルダ内のファイル一覧を取得する()
Dim objFso As Object
Set objFso = CreateObject("Scripting.FileSystemObject")
Dim objFolder As Object
Set objFolder = objFso.GetFolder(ThisWorkbook.Path & "\xlsx")
Dim f As Object
For Each f In objFolder.Files
Debug.Print f.Name
Next f
Set objFso = Nothing
End Sub
流れとしては
- FileSystemオブジェクトを生成
- 対象とするフォルダを取得
- 対象フォルダ内のファイルのコレクションについて繰り返し
- 各ファイル名を出力
- FileSystemオブジェクトを破棄
という流れです。
お題のフォルダと実行結果
お題とするフォルダはマクロを記載するブックと同階層のフォルダ「xlsx」で、以下のような構成になっています。
前述のプログラムを実行すると、以下のようにイミディエイトウィンドウに出力がされます。
以下で、プログラムのポイントを解説していきます。
GetFolderメソッドでFolderオブジェクトを取得
まず対象となるフォルダをFolderオブジェクトとして取得します。
書き方は
です。フォルダパスの最後の「\」はつけても良いですし、なくても大丈夫です。
前述のプログラムでいうと6行目からの以下の部分ですね。
Dim objFolder As Object
Set objFolder = objFso.GetFolder(ThisWorkbook.Path & "\xlsx")
現在のブックと同階層にある「xlsx」フォルダを指定しています。
Filesプロパティでフォルダ内のファイルをコレクションとして取得
次に、対象となるフォルダ内のファイルをオブジェクトの集合、つまりFilesコレクションとして取得します。
その場合、Folderオブジェクトに対するFilesプロパティを使います。
書き方はこちら。
ファイルをコレクションとして取得できれば、For Each文でコレクションの全ての要素についての繰り返し処理をすることができますね。
それが、プログラムでいる9行目からの部分です。
Dim f As Object
For Each f In objFolder.Files
'処理
Next f
ここでFor Each文内の処理は、対象フォルダ内のFilesコレクションの要素数の回数だけ繰り返されます。
毎回の繰り返しで、各要素が順番に繰り返し用のオブジェクト変数fに格納されます。fはこの場合、Fileオブジェクトとなります。
従って、「’処理」の部分で、Fileオブジェクトfに対する操作をすることで、対象フォルダ内のFilesコレクションの全ての要素について、同様の処理を行うことができるというわけです。
コレクションに対するFor Each文については以下記事もご参考ください。
Nameプロパティでファイル名を取得する
Fileオブジェクトの名前、つまりファイル名を取得するには、Nameプロパティを使います。
書き方はこちら。
シンプルですね。
プログラムでいうと、11行目の部分ですね。
Debug.Print f.Name
fは対象フォルダ内のFilesコレクションの要素、つまりFileオブジェクトですので、そのファイル名が出力されるということになります。
まとめ
以上、エクセルVBAでFileSystemオブジェクトを使って、フォルダ内のファイル一覧を取得する方法をお伝えしました。
Filesコレクションを掴んでしまえばこちらのものですね。
For Each文はとっても便利なので、ぜひマスターして頂ければと思います。
今回、ファイル一覧をやりましたので、次回はフォルダ一覧を出力してみたいと思います。
どうぞお楽しみに!