No.015
フォルダー内のフォルダーとファイルの一覧をセルに書き出す2 《FileSystemObject》
2003/2007/2010/2013
フォルダー内のフォルダーやファイルの名前をシートに一覧化するVBAをご紹介します。
フォルダーやファイルの名前を取得したい場合に複数の方法がありますが、今回は FileSystemObjectオブジェクトを使用した方法をご案内します。
同じ動作でDir関数を使用したヘルプ「フォルダー内のフォルダーとファイルの一覧をセルに書き出す1 《Dir》」も参考にしてください。
FileSystemObjectオブジェクトは、ファイルやフォルダーを操作することができるオブジェクトで、普段よく行うあやゆる操作ができます。
今回はそのうちのファイル名やフォルダー名の取得に利用します。
簡単な説明を後に入れますので、先に記述を確認していきましょう。
FileSystemObjectオブジェクトを使用する際の記述はいくつかパターンありますが、よく使われる2パターンでご案内します。
サンプルの動作は、まずExcelのセルB1にファイル、フォルダーの一覧がほしいフォルダーのパスを入力しておきます。
ボタンをクリック(VBAを実行)すると、セルA3以下にフォルダー、ファイルの一覧が表示されます。
今回サンプルファイルも用意していますので、次のリンクをクリックしダウンロードしてご利用ください。
<オブジェクト変数を使う方法>
Sub Sample1()
Dim FSO As Object
Dim strPath As String
Dim intPathLen As Integer
Dim intR As Integer
Dim F As Variant
strPath = Range("B1") & "¥" 'フォルダー場所
intPathLen = Len(strPath)
intR = 3
Range(Cells(3, 1), Cells(1048576, 1)).ClearContents
Set FSO = CreateObject("Scripting.FileSystemObject")
For Each F In FSO.GetFolder(strPath).SubFolders 'フォルダー名
Cells(intR, 1) = Right(F, Len(F) - intPathLen)
intR = intR + 1
Next F
For Each F In FSO.GetFolder(strPath).Files 'ファイル名
Cells(intR, 1) = Right(F, Len(F) - intPathLen)
intR = intR + 1
Next F
Set FSO = Nothing
End Sub
<Withステートメントを使う方法>
Sub Sample2()
Dim strPath As String
Dim intPathLen As Integer
Dim intR As Integer
Dim F As Variant
strPath = Range("B1") & "¥" 'フォルダー場所
intPathLen = Len(strPath)
intR = 3
Range(Cells(3, 1), Cells(1048576, 1)).ClearContents
With CreateObject("Scripting.FileSystemObject")
For Each F In .GetFolder(strPath).SubFolders 'フォルダー名
Cells(intR, 1) = Right(F, Len(F) - intPathLen)
intR = intR + 1
Next F
For Each F In .GetFolder(strPath).Files 'ファイル名
Cells(intR, 1) = Right(F, Len(F) - intPathLen)
intR = intR + 1
Next
End With
End Sub
どちらの記述においても、CreateObject関数を使用して、CreateObjectオブジェクトを呼び出し、ファイル システムへのアクセスを可能にしています。
もう少し詳しくは、下記<ヘルプmemo>をご覧ください。
では、記述について触れておきます。
For Each~Next の構文がそれぞれ2度出てきます。
For Each F In FSO.GetFolder(strPath).~
.GetFolder(パス)のあと、1つ目の「.SubFolders」はパス配下のすべてのサブフォルダー、2つ目の「.Files」はパス配下のすべてのファイルがコレクションで返されます。
For Each構文により、コレクション内の各すべてを処理します。
処理内容は、取得したフォルダー名やファイル名をセルに代入する作業を行うわけですが、それぞれフルパスで返されるため、Right関数を使用して名前部分を取り出しています。
ヘルプmemo
<FileSystemObjectオブジェクト>
コンピューターのファイル システムへのアクセスを提供します。
構文: Scripting.FileSystemObject
ヒント:
FileSystemObjectオブジェクトは、VBA組み込みではない外部オブジェクトで、Windows内にある Scrrun.dll ファイルより提供されるものです。
したがって、FileSystemObjectオブジェクトを使用するためにはアクセスする必要があり、CreateObject関数を使用して参照、FileSystemObjectオブジェクトのインスタンスを作成することができます。
あとは、FileSystemObjectオブジェクトのプロパティやメソッドを使用して、ドライブ、フォルダー、ファイルを扱うことができます。
FileSystemObjectオブジェクトについては、別の機会に詳しくご紹介していく予定です。