前回、「FileSearchの代わりにFileSystemObjectを使用する」で紹介したとおり、Office2007以上は
FileSearch
オブジェクトが使えなくなり、FileSystemObject
を使うようになった。FileSystemObject
に替えることで、下記のことができなくなった。- サブディレクトリ配下の検索
- ファイル名でソート
- ファイル名(拡張子)の指定
1.サブディレクトリの検索は、こちらを参照→ 【VBA】FileSearchの代わりにFileSystemObjectを使用する
今回は、「2.ファイル名でソート」と「3.ファイル名(拡張子)の指定」をメインに紹介する。
【追記:2014/05/24】
サブディレクトリ検索、ソート、拡張子フィルタを実装したテンプレートを作成した。
→ 【VBA】指定フォルダ配下のブックを操作するためのマクロテンプレート
ファイル名でソート
FileSearchの場合
下記の通り、ものっそい簡単にソートできる。
If fso.Execute(SortBy:=msoSortByFileName _
, SortOrder:=msoSortOrderAscending) Then
~~ 処理 ~~
End If
FileSystemObjectの場合
配列に入れて、クイックソートなりシェルソートなりでソートする手もあるが、ADOを使用すると比較的簡単にファイル名のソートができる。
'-- "FILENAMEフィールドを作成"
Dim ado As Object
Set ado = CreateObject("ADODB.Recordset")
ado.Fields.Append "FILENAME", 200, 300, 32
ado.Open
'-- GetFolderでパスを取得しAdoに格納
For Each file In fso.GetFolder(path).Files
ado.AddNew
ado.Fields(0) = file
ado.Update
Next
'-- FILENAMEでソート
ado.Sort = "FILENAME ASC"
ado.MoveFirst
'-- 処理実行
Do Until ado.EOF
~~ 処理 ~~
ado.MoveNext
Loop
ado.Close
Set ado = Nothing
ファイル名(拡張子)の指定
FileSearchの場合
これまた、ものっそい簡単に、しかも取得時にファイル名を指定して特定のファイルだけ取得できる。
Dim fso As FileSearch
Set fso = Application.FileSearch
'--ファイル名(CSVファイルを取得)
fso.Filename = "*.csv"
~~ 取得処理 ~~
FileSystemObjectの場合
FileSearchと違い、取得時にファイル名を指定できないため、取得してからフルイにかける必要がある。
~~ 取得処理 ~~
If LCase(fso.GetExtensionName(filename)) = "csv" Then
~~ 処理 ~~
End If
以上
0 件のコメント :
コメントを投稿