ファイル操作

【VBA】FileSystemObjectでファイルパスをパーツごとに分割する方法

更新日:2024/01/18

VBAでファイルのパスからファイル名や親パスを取得する場合、FileSystemObjectオブジェクトを使用すると簡単に取得できます。

 

ファイルパスを分割するメソッド

FileSystemObjectオブジェクトはファイルパスを分割するメソッドとして、次の5つが用意されています。

メソッド名内容
GetDriveNameドライブ名取得
GetParentFolderName親フォルダ取得
GetFileNameファイル名取得
GetExtensionName拡張子取得
GetBaseNameベース名(拡張子を除いたファイル名)取得

これらのメソッドは、実際にファイルやフォルダが存在するかどうかを考慮しません。
単純に文字列処理を行うだけです。

それぞれの構文と、使用例を紹介します。

 

ドライブ名取得:GetDriveName

ファイルパスからドライブ名を取得するときは、GetDriveNameメソッドを使用します。

FileSystemObjectオブジェクト.GetDriveName( Path )
  1. 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 )
  1. 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 )
  1. 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 )
  1. 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

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。