前々回・前回とDir関数を使用したファイル検索について検証してみた。
今回はFileSystemObjectを利用してファイル検索実現してみたい。
FileSystemObject
FileSystemObjectを使用するには参照設定が必要です。
ツール ⇛ 参照設定
Microsoft Scripting Runtime にチェック
今回のコードではFileSystemObjectとFolderオブジェクトとDictionaryオブジェクトの以下の機能を使用している。
FileSystemObject
・GetFolder
Folderオブジェクト
・Files
Dictionaryオブジェクト
・Add
・Count
GetFolder
GetFolder(FolderPath As String) as Folder
引数 | 内容 |
---|---|
FolderPath | 特定のフォルダーへのパス (絶対または相対パス) です。 |
Folderpathに指定したフォルダーパスのFolderオブジェクトを取得する。
Files
Files as Files
Folderオブジェクト内のファイルコレクションを取得する。
Add
Add(Key,Item)
引数 | 内容 |
---|---|
Key | 追加される項目に関連付けられているキー。必須。重複した値を指定することが出来ない。 |
Item | 追加されるキーに関連付けられているアイテム。必須。 |
Dictionaryオブジェクトに要素を追加する。今回はこのDictionaryオブジェクトにファイル検索結果を蓄積していく。
Count
Count as long
Dictionaryオブジェクト内の要素数を返す。
コード
Option Explicit Rem FileSystemObject・DictionaryオブジェクトともにMicrosoft Scripting Runtimeへの参照設定が必要 Sub FSOSearch() Dim myFSO As FileSystemObject Dim myFile As Variant Dim myDic As Dictionary Set myFSO = New FileSystemObject Set myDic = New Dictionary 'GetFolderで取得したFolderオブジェクト内のファイル一覧をFilesプロパティで取得 For Each myFile In myFSO.GetFolder("C:\Users\Kou\OneDrive\ドキュメント\").Files myDic.Add myFile, "" Next Dim myVar As Variant Dim i As Long: i = 1 ReDim myVar(1 To myDic.Count, 1 To 1) 'おなじみの配列へ転記してからのセル範囲への一括転記 For Each myFile In myDic.Keys myVar(i, 1) = myFile i = i + 1 Next Cells.Clear Range("A1").Resize(UBound(myVar), 1).Value = myVar End Sub
Dir関数とは違い、取得した値はファイル名であることがわかっているので、一々判定をしなくて良いのは楽ですね。
まとめ
Dir関数の時と同じようにまずは単一のフォルダ内を検索するところまでを作成しました。
次回は再帰処理を利用してサブフォルダ内の検索を実現してみようと思います。