Excelでファイル一覧を作成するマクロを作りました。フォルダを指定すると、その中のファイルについて、ファイル名、フォルダ名、フォルダ付ファイル名を一覧にします。下の階層を含めます。すなわち、フォルダ内にフォルダがある場合はその中のファイルについても抽出します。
コードは三つあります。一枚のモジュールに貼り付けてください。
宣言
Option Explicit
Dim all_files(0 To 9999, 2) As String
Dim last_index As Long
Dim all_files(0 To 9999, 2) As String
Dim last_index As Long
モジュールレベル変数を二つ宣言しています。
ファイル名を取得する
Function get_files(my_path)
'指定したフォルダにある全てのファイル名(パス付)を取得する。
Dim this_file(999) As String
Dim this_path As String
Dim i As Long, j As Long
this_file(0) = Dir(my_path, vbDirectory)
i = 0
Do
i = i + 1
this_file(i) = Dir
Loop Until this_file(i) = ""
For j = 0 To i - 1
If this_file(j) <> "." And this_file(j) <> ".." Then
this_path = my_path & this_file(j)
If GetAttr(this_path) = vbDirectory Then
Call get_files(this_path & "\") '末尾は半角¥
Else
all_files(last_index, 0) = this_file(j)
all_files(last_index, 1) = my_path
all_files(last_index, 2) = my_path & this_file(j)
last_index = last_index + 1
End If
End If
Next j
End Function
'指定したフォルダにある全てのファイル名(パス付)を取得する。
Dim this_file(999) As String
Dim this_path As String
Dim i As Long, j As Long
this_file(0) = Dir(my_path, vbDirectory)
i = 0
Do
i = i + 1
this_file(i) = Dir
Loop Until this_file(i) = ""
For j = 0 To i - 1
If this_file(j) <> "." And this_file(j) <> ".." Then
this_path = my_path & this_file(j)
If GetAttr(this_path) = vbDirectory Then
Call get_files(this_path & "\") '末尾は半角¥
Else
all_files(last_index, 0) = this_file(j)
all_files(last_index, 1) = my_path
all_files(last_index, 2) = my_path & this_file(j)
last_index = last_index + 1
End If
End If
Next j
End Function
ファイルを取得し配列変数all_filesにセットします。フォルダの場合は再帰的にその中のファイルを取得します。
メイン
Sub ファイル一覧()
Dim my_path As String
Dim i As Long
Erase all_files
last_index = 0
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "フォルダを選択"
.AllowMultiSelect = False
If .Show = -1 Then
my_path = .SelectedItems(1)
Else
Exit Sub
End If
End With
Call get_files(my_path & "\") '末尾は半角¥
Cells.ClearContents
Range("a1:c1").Value = Array("File", "Folder", "Folder+File")
Range("a2:c10001").Value = all_files
End Sub
Dim my_path As String
Dim i As Long
Erase all_files
last_index = 0
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "フォルダを選択"
.AllowMultiSelect = False
If .Show = -1 Then
my_path = .SelectedItems(1)
Else
Exit Sub
End If
End With
Call get_files(my_path & "\") '末尾は半角¥
Cells.ClearContents
Range("a1:c1").Value = Array("File", "Folder", "Folder+File")
Range("a2:c10001").Value = all_files
End Sub
フォルダを指定しファイル情報を配列変数にセットします。
その配列変数をアクティブシートに展開しファイル一覧を作成します。1列目がファイル名、2列目がフォルダ名、3列目がフォルダ付きファイル名です。
コメント
[…] 「下の階層を含めたファイル一覧を作成するマクロ」を参考にして、指定したフォルダの配下のフォルダに対応したバージョンを作りました。 宣言以降、全てのコードを下のとおり、まとめました。全てをコピー&ペーストするだけで使えます。 […]