【VBA/EXCEL】指定フォルダ内のファイル一覧の取得
はじめに
- VBAで指定フォルダ内のファイル一覧を取得するプログラムを作ります。
- 開発及び実行環境はWindowsを前提にしています。
- インストール等不要なBatchやVBScriptや、人気のPythonでやってもよいのですが事務作業で馴染みやすいVBAでやっていこうと思います。
ファイル一覧取得
基本となるソースコードは以下を参考にしています。 excel-ubara.com
FileSystemObjectを使用するため、予め「ツール」→「参照設定」からMicrosoft Scripting Runtimeを有効にしておく必要があります。
プログラムの大まかなかな流れとしては、
- フォルダ選択するためのダイアログ操作
- 結果出力シートの初期化
- サブフォルダ一覧の取得
- ファイル一覧の取得
となります。
以下が、全体のソースコードです。
Sub ファイル一覧() Dim objFso As FileSystemObject Dim objFldr As Folder Dim objSubFldr As Folder Dim objFile As File Dim strDir As String Dim i As Long 'フォルダの選択 With Application.FileDialog(msoFileDialogFolderPicker) .Title = "フォルダを選択" .AllowMultiSelect = False If .Show = -1 Then strDir = .SelectedItems(1) & "" Else Exit Sub End If End With Set objFso = New FileSystemObject If Not objFso.FolderExists(strDir) Then MsgBox ("指定のフォルダは存在しません") Exit Sub End If Cells.ClearContents Cells(1, 1) = strDir Cells(3, 1) = "ファイル名" Cells(3, 2) = "サイズ" Cells(3, 3) = "更新日時" i = 4 'サブフォルダ一覧取得 Set objFldr = objFso.GetFolder(strDir) For Each objSubFldr In objFldr.SubFolders Cells(i, 1) = objSubFldr.Name i = i + 1 Next 'ファイル一覧取得 For Each objFile In objFldr.Files With objFile Cells(i, 1) = .Name Cells(i, 2) = WorksheetFunction.RoundUp(.Size / 1024, 0) Cells(i, 2).NumberFormatLocal = "0 ""KB""" Cells(i, 3) = .DateLastModified i = i + 1 End With Next Set objFso = Nothing Set objFldr = Nothing Set objSubFldr = Nothing End Sub
実行すると、「フォルダを選択」ウィンドウが起動します。
ファイル一覧を取得したいフォルダを選択します。
今回はtestフォルダを選択します。
また、testフォルダの内容は以下の通りです。
ファイル一覧の取得結果は以下の通り出力します。
おわり
- サブフォルダも含めたファイル一覧の取得や、EXCELのシート名一覧取得もやろうと思います。