ファビコン。井の家紋。フォルダ内のファイル名取得(ファイル名一覧の作成) | エクセルマクロ(VBA)実践蔵(じっせんぐら)

前の項目 - フォルダ参照-フォルダ選択ダイアログ
次の項目 - マクロで表やグラフを書くためのコツ

フォルダ内のファイル名取得(ファイル名一覧の作成)最終更新日:2023-08-28

「前の項目」のフォルダ参照に処理を追加して、ファイル名一覧(ファイルリスト)を作成するマクロについて考えていきます。

フォルダ参照-フォルダ選択ダイアログについては、こちら

エクセルファイルの表面側はそのまま変更せず、コードのみを追加していきます。

エクセルExcelマクロVBA フォルダ参照(表面側)

ファイルリスト作成(コード)

シート側のマクロに下記を追加します。ファイル名一覧を出力するシート名を「filelist」としています。

 
Sub 実行_Click()

Dim strcond As String
Dim strtemp As Variant

'シートクリア
ThisWorkbook.Worksheets("filelist").UsedRange.Clear

'対象ファイルを取得
strcond = Range("D5").Value
'カンマで分割
strtemp = Split(strcond, ",")

If UBound(strtemp) > 0 Then
'一つ目のカンマより後ろの文字列を取得
strcond = strtemp(1)
End If

'フォルダパス、書き出しシート名、対象ファイル形式を渡す
'バグ対応 2023/8/28
Call GetAllFile(Range("B3").Value, "filelist", strcond)


End Sub

この関数を実行ボタンが押下されたときに動作するマクロとして登録します。

上記で呼び出しているGetAllFile関数を、標準モジュール側に記載します。

 
'**************************************
' ファイルリスト作成
' Path:フォルダパス
' outputSheetname:出力先シート名
' (存在しなければシートを作成します。
' 既に存在する場合は、シート全体を一度クリアします。)
' condition:対象ファイルの条件
'**************************************
Function GetAllFile(Path As String, outputSheetname As String, condition As String) As Long

Dim fname_str As String
Dim row_l As Long
Dim write_sheet As Worksheet

'書き出し行数の初期化
row_l = 0

fname_str = Dir(Path & "\" & condition, vbNormal)

On Error Resume Next

Set write_sheet = ThisWorkbook.Worksheets(outputSheetname)

If Err.Number <> 0 Then
'シートが存在しない場合、シートを新規作成(右端に追加)
ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets( _
Worksheets.Count)).Name = outputSheetname

Set write_sheet = ThisWorkbook.Worksheets(outputSheetname)
Else
'前のデータをクリア
write_sheet.Cells.Clear

End If

Do While fname_str <> ""

If InStr(fname_str, ".") = 0 Or StrComp(fname_str, ".") = 0 Or StrComp(fname_str, "..") = 0 Then
'フォルダ

ElseIf InStr(fname_str, "~$") <> 0 Then
'システムファイル

Else
'ファイル名をセルに書き出す
write_sheet.Cells(row_l + 1, 1) = Path & "\" & fname_str
row_l = row_l + 1

End If

fname_str = Dir()
Loop

GetAllFile = row_l

End Function

この処理では、指定フォルダ配下に格納されているファイルのみシートに書き出しています。
拡張子を持たないものをフォルダと判断しているため、拡張子のないファイルは無視されます。

指定フォルダ配下のフォルダをさらにたどりたい場合は、再帰関数にする必要があります。

ファイル一覧を出力するエクセルマクロ有効ブックのダウンロード

ダウンロードしたエクセルファイルを起動し、コンテンツの有効化を行う。

マクロの有効化手順については、こちらも参考にしてください。

フォルダ参照(ファイル一覧出力)エクセルファイル(xlsm)のダウンロード

ファイル一覧を出力しているシートをエクセル側の操作で非表示に設定していても、マクロの動作に影響はないため、デバッグするためのログとして確認することができます。

ファイル数が多い場合は、一度ファイル一覧を作成後にファイルを開く処理に移行していくと処理すべきファイル数によってマクロの進捗率を表示させることができます。

逆に、ファイル名を書き出した後に、そのファイルを開くような処理順序とすると、問題が発生した場合にどのファイル内のデータを処理しているときに問題が起きたのかが明確になります。

前の項目 - フォルダ参照-フォルダ選択ダイアログ
次の項目 - マクロで表やグラフを書くためのコツ