今日は、任意のフォルダ内にあるすべてのファイルを取得する方法を取り上げます。
もちろん、サブフォルダ内のファイルもすべて取得します。
今回は、エクセルを使ってやってみましょう。
VBでも、同様の論理でできますので、興味のある方はチャレンジしてみてください。
エクセルの利点は、取得したファイル名をセルに書き出すことができる点でしょう。
ありがたいですね。
それでは、エクセルを起動してください。
ALTキー + F11キー で、Visual Basic Editorを起動してください。
次に、「挿入」メニューから、「標準モジュール」をクリックしてください。
これで、コードを書く準備が出来ました。
今回は、ファイルやフォルダを扱うので、専用の部品を使ってみます。
「ファイルシステムオブジェクト」といいます。
ただし、これは、いきなり使用すると手ごわいので、まずは、参照設定をして、
使いやすいようにします。
「ツール」メニューの「参照設定」をクリックします。
表示されたダイアログボックスの「参照可能なライブラリ ファイル」の一覧から、
「Microsoft Scripting Runtime」を見つけ出して、チェックを入れてください。
OKをクリックして、ダイアログボックスを閉じます。
さあ、それでは、コードを記述しましょう。
以下のように入力してください。
Option Explicit
Private fso As FileSystemObject
Private c As Integer
Sub getFiles(path As String)
Dim fs As folders
Dim f As folder
Dim mFile As File
For Each mFile In fso.GetFolder(path).Files
Cells(c, 1).Value = mFile.Name
c = c + 1
Next
Set fs = fso.GetFolder(path).SubFolders
If fs.Count = 0 Then Exit Sub
For Each f In fs
getFiles (f.path)
Next
End Sub
Sub test()
Dim FolderPath As String
Set fso = New FileSystemObject
FolderPath = "C:sample"
c = 1
getFiles (FolderPath)
Set fso = Nothing
End Sub
参考までに、画像を載せておきます。
getFiles が、実際の処理をするプロシージャです。
再帰呼び出しを駆使して、サブフォルダ内のファイルを取得できるようになっています。
test が、任意のフォルダを指定して、先ほどのgetFilesを呼び出すプロシージャですね。
このプロシージャの中の、
FolderPath = "C:\sample"
のダブルコートの部分を、任意のフォルダ名に変更してください。
たとえば、マイドキュメントなら、
C:\Documents and Settings\[ここにユーザー名を入れてください]\My Documents
となりますね。
それでは、エクセルに切り替えて、マクロを実行しましょう。
ALTキー + F8キー を押してください。
エクセルのシートにファイル名の一覧が書き出されます。
たくさんのファイルが保存されているフォルダを指定すると、
結構時間がかかったりしますので、ご注意くださいね。
だい