Excelが大好きだ!

Excel大好き経理マンがExcelの事を書き綴っていきます。


スポンサードリンク

FileSystemObjectを利用したファイル検索(ファイル検索比較3)

前々回・前回とDir関数を使用したファイル検索について検証してみた。

www.excellovers.com

www.excellovers.com

今回は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関数の時と同じようにまずは単一のフォルダ内を検索するところまでを作成しました。

次回は再帰処理を利用してサブフォルダ内の検索を実現してみようと思います。