【VBA】FileSystemObjectでファイルパスをパーツごとに分割する方法
更新日:2024/01/18
VBAでファイルのパスからファイル名や親パスを取得する場合、FileSystemObjectオブジェクトを使用すると簡単に取得できます。
ファイルパスを分割するメソッド
FileSystemObjectオブジェクトはファイルパスを分割するメソッドとして、次の5つが用意されています。
メソッド名 | 内容 |
---|---|
GetDriveName | ドライブ名取得 |
GetParentFolderName | 親フォルダ取得 |
GetFileName | ファイル名取得 |
GetExtensionName | 拡張子取得 |
GetBaseName | ベース名(拡張子を除いたファイル名)取得 |
これらのメソッドは、実際にファイルやフォルダが存在するかどうかを考慮しません。
単純に文字列処理を行うだけです。
それぞれの構文と、使用例を紹介します。
ドライブ名取得:GetDriveName
ファイルパスからドライブ名を取得するときは、GetDriveNameメソッドを使用します。
FileSystemObjectオブジェクト.GetDriveName( Path )
- Path:ドライブ名を取得したいファイルパス
パスにドライブ文字が含まれていない場合、空文字が返ります。
次のコードは、GetDriveNameの使用例です。
Function GetDriveName(filePath) As String
GetDriveName = CreateObject("Scripting.FileSystemObject") _
.GetDriveName(filePath)
End Function
' テスト用
Sub GetDriveNameTest()
Debug.Print "【ドライブ名】" & GetDriveName("C:\Users\xxx\Documents\image.png")
Debug.Print "【ドライブ名】" & GetDriveName("\Users\xxx\Documents\image.png")
End Sub
GetDriveNameTestを実行すると、イミディエイトウィンドウに次のような結果が表示されます。
【ドライブ名】C: 【ドライブ名】
親フォルダ取得:GetParentFolderName
ファイルパスから親フォルダのパスを取得するときは、GetParentFolderNameメソッドを使用します。
FileSystemObjectオブジェクト.GetParentFolderName( Path )
- Path:ドライブ名を取得したいファイルパス
パスにドライブ文字が含まれている場合、ドライブ文字を含んだ文字列を返します。
親フォルダが存在しない場合、ドライブ文字があるなしに関係なく、空文字を返します。
次のコードは、GetDriveNameの使用例です。
Function GetParentFolderName(filePath) As String
GetParentFolderName = CreateObject("Scripting.FileSystemObject") _
.GetParentFolderName(filePath)
End Function
' テスト用
Sub GetParentFolderNameTest()
Debug.Print "【親フォルダ名】" & GetParentFolderName("C:\Users\xxx\Documents\image.png")
Debug.Print "【親フォルダ名】" & GetParentFolderName("\Users\xxx\Documents\image.png")
Debug.Print "【親フォルダ名】" & GetParentFolderName("C:\")
End Sub
GetParentFolderNameTestを実行すると、イミディエイトウィンドウに次のような結果が表示されます。
【親フォルダ名】C:\Users\xxx\Documents 【親フォルダ名】\Users\xxx\Documents 【親フォルダ名】
ファイル/フォルダ名取得:GetFileName
ファイルパスからファイル名およびフォルダ名を取得するときはGetFileNameメソッドを使用します。
次のコードは、取得例です。
Function GetFileName(filePath) As String
GetFileName = CreateObject("Scripting.FileSystemObject") _
.GetFileName(filePath)
End Function
' テスト用
Sub GetFileNameTest()
Debug.Print "【ファイル名】" & GetFileName("C:\Users\xxx\Documents\image.png")
Debug.Print "【ファイル名】" & GetFileName("C:\Users\xxx\Documents\folder")
Debug.Print "【ファイル名】" & GetFileName("image.png")
Debug.Print "【ファイル名】" & GetFileName("c:\")
End Sub
GetFileNameTestを実行すると、イミディエイトウィンドウに次のような結果が表示されます。
【ファイル名】image.png 【ファイル名】folder 【ファイル名】image.png 【ファイル名】
拡張子取得:GetExtensionName
ファイルパスから拡張子を取得するときは、GetExtensionName メソッドを使用します。
FileSystemObjectオブジェクト.GetExtensionName( Path )
- Path:拡張子を取得したいファイルパス
パスに拡張子が含まれていない場合、空文字を返します。
次のコードは、GetExtensionNameの使用例です。
Function GetExtensionName(filePath) As String
GetExtensionName = CreateObject("Scripting.FileSystemObject") _
.GetExtensionName(filePath)
End Function
' テスト用
Sub GetExtensionNameTest()
Debug.Print "【拡張子】" & GetExtensionName("C:\Users\xxx\Documents\image.png")
Debug.Print "【拡張子】" & GetExtensionName("C:\Users\xxx\Documents\folder")
Debug.Print "【拡張子】" & GetExtensionName("image.png")
End Sub
GetExtensionNameTestを実行すると、イミディエイトウィンドウに次のような結果が表示されます。
【拡張子】png 【拡張子】 【拡張子】png
ファイル/フォルダ名(拡張子無し)取得:GetBaseName
ファイルパスから拡張子を含まないファイル名およびフォルダ名(ベース名)を取得するときは、GetBaseNameメソッドを使用します。
FileSystemObjectオブジェクト.GetBaseName( Path )
- Path:ファイル名またはフォルダ名を取得したいファイルパス
パスが区切り文字(\)で終わる場合、最後の区切り文字は無視されます。
次のコードは、GetBaseNameの使用例です。
Function GetBaseName(filePath) As String
GetBaseName = CreateObject("Scripting.FileSystemObject") _
.GetBaseName(filePath)
End Function
' テスト用
Sub GetBaseNameTest()
Debug.Print "【ベース名】" & GetBaseName("C:\Users\xxx\Documents\image.png")
Debug.Print "【ベース名】" & GetBaseName("C:\Users\xxx\Documents\folder")
Debug.Print "【ベース名】" & GetBaseName("image.png")
Debug.Print "【ベース名】" & GetBaseName("c:\")
End Sub
GetBaseNameTestを実行すると、イミディエイトウィンドウに次のような結果が表示されます。
【ベース名】image 【ベース名】folder 【ベース名】image 【ベース名】
更新日:2024/01/18
関連記事
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。