No.014
フォルダー内のフォルダーとファイルの一覧をセルに書き出す1 《Dir》
2003/2007/2010/2013
フォルダーやファイルを確認、整理したいとき、フォルダーやファイルの名前がシートに一覧化されると、チェックに使えたりと便利です。
それを自動にやってくれるVBAをご紹介します。
フォルダーやファイルの名前を取得したい場合に複数の方法がありますが、今回は Dir関数を使用した方法でご案内します。
では先に記述をご紹介し、あとでポイントを少しご紹介します。
Sub Sample1()
Dim strPath As String
Dim strFlName As String
Dim intR As Integer
strPath = Range("B1") & "¥"
intR = 3
Range(Cells(3, 1), Cells(1048576, 1)).ClearContents
strFlName = Dir(strPath & "*", vbDirectory)
Do While strFlName <> ""
If Replace(strFlName, ".", "") <> "" Then
Cells(intR, 1) = strFlName
intR = intR + 1
End If
strFlName = Dir
Loop
End Sub
サンプルの動作は、まずExcelのセルB1にファイル、フォルダーの一覧がほしいフォルダーのパスを入力しておきます。
ボタンをクリック(VBAを実行)すると、セルA3以下にフォルダー、ファイルの一覧が表示されます。
今回サンプルファイルも用意していますので、次のリンクをクリックしダウンロードしてご利用ください。
では、記述についてのポイントを以下に少し加えます。
フォルダー内のすべてのフォルダーやファイルを調べるために、Dir関数を利用しています。
Dir関数の基本的な説明は、次のヘルプ「フォルダー内のすべてブックを開いて同じ処理を行う 《Do~Loop・Dir》」をご参照ください。
今回の記述のポイントは、Dir関数の引数です。
strFlName = Dir(strPath & "*", vbDirectory)
Dir関数1つ目の引数に「場所¥ファイル名」を指定しますが、場所は変数strPath、ファイル名は「"*"」と、なんでもありのワイルドカードを使用しています。
これでフォルダー内(場所)のすべてが対象となります。
Excelだけの一覧がほしい場合は「"*.xlsx"」、テキスト ファイルなら「"*.txt"」に変えてください。
そのあとカンマがあり、2つ目の引数に「vbDirectory」と指定しています。
これでファイルとフォルダーも対象になります。
ファイルの一覧のみでよい場合は場合は、「,vbDirectory」は必要ないので外してください。
そして次に、ループに入り、条件があります。
If Replace(strFlName, ".", "") <> "" Then
この条件を満たしたときのみファイル名またはフォルダー名をセルに記載し、満たさない場合は何もせずに、次のファイルフォルダー取得に進みます。
変数strFlNameには、Dir関数が返したファイル名やフォルダー名が入ります。
実は、この条件を外して実行すると、上の階層のフォルダーを意味する「.」「..」といったドットが返されます。
これらは普通いらないと思いますので、変数strFlNameにドットのみの内容が格納された場合はセルに記載しないよう、条件を付けています。
ドットのみの内容が返されるのは、フォルダー名も一覧するために、Dir関数の引数で「vbDirectory」を指定したためです。
したがって、ファイル名のみの一覧でよければ、この条件も必要ないことになります。
ファイル名の一覧だけでよい場合は、次のようなシンプルな記述となります。
Sub Sample2()
Dim strPath As String
Dim strFlName As String
Dim intR As Integer
strPath = Range("B1") & "¥"
intR = 3
Range(Cells(3, 1), Cells(1048576, 1)).ClearContents
strFlName = Dir(strPath & "*")
Do While strFlName <> ""
Cells(intR, 1) = strFlName
intR = intR + 1
strFlName = Dir
Loop
End Sub
以上ですが、同じ動作で FileSystemObjectオブジェクトを使用したヘルプ「フォルダー内のフォルダーとファイルの一覧をセルに書き出す2 《FileSystemObject》」も是非参考にしてください。