更新日:、 作成日:

VBA パスの操作

はじめに

Excel VBA マクロでパスを操作する方法を紹介します。

2 つのパスを結合できます。

パスのドライブ名、親フォルダ、ファイル名、拡張子などを取得できます。

パスを取得するには「ファイルやフォルダのパスを取得」をご覧ください。
相対パスについては「カレントディレクトリと相対パス」をご覧ください。

FileSystemObject について

ここでは VBA の標準の関数より便利な FileSystemObject を使った方法を紹介しています。基本的な使い方については「FileSystemObject ファイル操作の基礎」をご覧ください。

コードを見やすくするため FileSystemObject を参照設定しています。また、エラー処理は行っていません。

パスを操作する

パスの結合

Dim fso As FileSystemObject
Set fso = New FileSystemObject

Dim s As String

s = fso.BuildPath("D:\TipsFolder", "Tips.txt") ' パスの結合
Debug.Print(s) ' D:\TipsFolder\Tips.txt

s = fso.BuildPath("D:\TipsFolder", "SubFolder\Tips.txt")
Debug.Print(s) ' D:\TipsFolder\SubFolder\Tips.txt

' 後始末
Set fso = Nothing

fso.BuildPath 関数で 2 つのパスを結合したパスを取得できます。

第 1 (Path) 引数にパスを指定します。絶対パスと相対パスのどちらでも指定できます。

第 2 (Name) 引数にファイル名やパスを指定します。

この関数は単純に文字列として 2 つの引数を結合しています。どちらの引数も存在しないパスを指定できます。

親フォルダのパスを取得

Dim fso As FileSystemObject
Set fso = New FileSystemObject

Dim s As String

s = fso.GetParentFolderName("D:\TipsFolder\Tips.txt") ' 親フォルダのパスを取得
Debug.Print(s) ' D:\TipsFolder

s = fso.GetParentFolderName("D:\TipsFolder")
Debug.Print(s) ' D:\

s = fso.GetParentFolderName("D:\")
Debug.Print(s) ' 

' 後始末
Set fso = Nothing

fso.GetParentFolderName 関数で指定したパスの親フォルダのパスを取得できます。

第 1 引数にパスを指定します。絶対パスと相対パスのどちらでも指定できます。存在しないパスを指定できます。親フォルダを取得できないときは空文字を返します。

ファイルパスの操作

Dim fso As FileSystemObject
Set fso = New FileSystemObject

Dim s As String

s = fso.GetFileName("D:\Tips.txt")      ' ファイル名と拡張子
Debug.Print(s) ' Tips.txt

s = fso.GetBaseName("D:\Tips.txt")      ' ファイル名のみ
Debug.Print(s) ' Tips

s = fso.GetExtensionName("D:\Tips.txt") ' 拡張子のみ
Debug.Print(s) ' txt

' 後始末
Set fso = Nothing

fso.GetFileName 関数で拡張子を含むファイル名を取得できます。フォルダを指定したときはフォルダ名を取得できます。

fso.GetBaseName 関数でファイル名のみを取得できます。フォルダを指定したときはフォルダ名を取得できます。

fso.GetExtensionName 関数で拡張子のみを取得できます。

いずれの関数も存在しないファイルやフォルダに対して使用できます。

Dim f As File
Set f = fso.GetFile("D:\Tips.txt") ' ファイルの取得

s = f.Name ' ファイル名の取得
Debug.Print(s) ' Tips.txt

s = f.Path ' ファイルパスの取得
Debug.Print(s) ' D:\Tips.txt

fso.GetFile 関数で指定したパスの File オブジェクトを取得します。ファイルが存在しないときはエラーが発生します。

f.Name プロパティから、拡張子を含むファイル名を取得または設定できます。

f.Path プロパティから、ファイルのパスを取得できます。

フォルダパスの操作

Dim fso As FileSystemObject
Set fso = New FileSystemObject

Dim s As String

s = fso.GetFileName("D:\TipsFolder")  ' フォルダ名を取得
Debug.Print(s) ' TipsFolder

s = fso.GetDriveName("D:\TipsFolder") ' ドライブ名を取得
Debug.Print(s) ' D:

' 後始末
Set fso = Nothing

fso.GetFileName 関数でフォルダ名を取得します。

fso.GetDriveName 関数でそのパスのドライブ名を取得します。

いずれの関数も存在しないパスに対して使用できます。

Dim fl As Folder
Set fl = fso.GetFolder("D:\TipsFolder") ' フォルダの取得

s = fl.Name ' フォルダ名の取得
Debug.Print(s) ' TipsFolder

s = fl.Path ' パスの取得
Debug.Print(s) ' D:\TipsFolder

fso.GetFolder 関数で指定したパスの Folder オブジェクトを取得します。フォルダが存在しないときはエラーが発生します。

fl.Name プロパティから、フォルダ名を取得または設定できます。既に存在しているフォルダ名に変更するとエラーが発生します。

fl.Path プロパティから、フォルダのパスを取得できます。