ファイルの拡張子を取得する
ファイルの拡張子を取得する
車輪の再発明
ファイル名の拡張子を取得したくて、次のようなコードを書いた。
ちなみに、マクロを書いたブックのあるフォルダ内のTargetFiles
フォルダ内に、次のようにファイルがあるものとする。
リスト1 標準モジュール
Public Sub test01() Set fsObj = New FileSystemObject Dim targetFolder As Folder Set targetFolder = _ fsObj.GetFolder(ThisWorkbook.Path & "\TargetFiles\") '" Dim targetFile As File For Each targetFile In targetFolder.Files Dim ar As Variant '……(1)' ar = Split(targetFile.Name, ".") Debug.Print ar(UBound(ar)) Next End Sub
拡張子を取り出すために、(1)からの3行
Dim ar As Variant ar = Split(targetFile.Name, ".") Debug.Print ar(UBound(ar))
で、ファイル名を一旦Split
によって「.
」で分割して配列にぶち込む。拡張子は必ず一番右端の「.
」の右側のはずなので、配列の最終要素に拡張子がぶち込まれる、という考え方。
こういうことがサッと思いついたとき、
わし、もしかして天才じゃないか?
とか、思うわけですよ。
でもまあ、たいていそういうのは、
に過ぎないわけです。
これもまさにそう。
GetExtentionNameメソッド
おなじみ、FileSystemObject
オブジェクトには、GetExtentionName
メソッドというものがある。その名の通り、ファイルから拡張子名を取り出すメソッド。
こいつを用いて、先のリスト1を書き換える。
リスト2 標準モジュール
Public Sub test02() Set fsObj = New FileSystemObject Dim targetFolder As Folder Set targetFolder = _ fsObj.GetFolder(ThisWorkbook.Path & "\TargetFiles\") '" Dim targetFile As File For Each targetFile In targetFolder.Files '……(2)' Debug.Print targetFile.Path '……(3)' Debug.Print fsObj.GetExtensionName(targetFile.Path) '……(4)' Next End Sub
見たらわかると思うが、変えたのは(2)からの4行。
For Each
~Next
でFolder
オブジェクト配下のFiles
コレクションの要素(=File
オブジェクト)に一つづつアクセスする。
(3)の
Debug.Print targetFile.Path
では、File
オブジェクトのPath
プロパティの値をイミディエイト・ウインドウに表示。
「ファイルの拡張子を取得する」という目的に照らせば、必要のないコード。
ただ、Path
プロパティの意味がThisWorkbook.Path
の「Path
」とは異なるので、参考のために書いた。
あとは、(4)の
Debug.Print fsObj.GetExtensionName(targetFile.Path)
でFileSystemObject
オブジェクトのGetExtentionName
メソッドを用いて拡張子名を取り出し、イミディエイト・ウインドウに表示する。
実行結果
この状態で実行すると、
こうなった。
File
オブジェクトのPath
プロパティがファイルのフルパスを返す、というのは初めて知った。
おわりに
FileSystemObject
、チョー便利じゃん。