ファイル操作

【VBA】BuildPathメソッドで二つのパスを連結する方法

更新日:2024/01/18

フォルダのパスにフォルダ名やファイル名のパスを連結するとき、VBAではBuildPathメソッドを使用すると便利です。
今回はBuildPathメソッドについてお伝えします。

 

BuildPathの構文

BuildPathはFileSystemObjectオブジェクトのメソッドです。
二つの文字列引数を受け取り、文字列を返します。

FileSystemObjectオブジェクト.BuildPath(Path As String, Name As String) As String
  1. Path:元となるパス
  2. Name:連結するフォルダやファイル名

Pathは存在するかどうかをチェックされません。
二つの文字列間が一つの区切り文字(\)になるように調整されます。

".." 等を含んだ相対パスも、そのまま連結されます。
相対パスを絶対パスに変換するときは、相対パスを含んだパスの連結を参考にしてください。

 

BuildPathの使用例

BuildPathの使用例です。

Sub buildPathTest()
    Dim fso As New Scripting.FileSystemObject
    
    With fso
        Debug.Print .BuildPath("c:\abc\def", "efg")
        Debug.Print .BuildPath("c:\abc\def\", "\efg")
        Debug.Print .BuildPath("c:\abc\def\", "\..\efg")
        Debug.Print .BuildPath("c:\abc\def\", "d:\efg")
    End With
    
End Sub

実行すると、次のような結果がイミディエイトウィンドウに表示されます。

c:\abc\def\efg
c:\abc\def\efg
c:\abc\def\..\efg
c:\abc\def\d:\efg

\で連結するように調整されています。
しかし、".." やドライブ文字が含まれていても、そのまま連結されています。

 

相対パスを含んだパスの連結

".."または"."を含んだパスを連結して絶対パスを取得するときは、BuildPathで連結後にGetAbsolutePathNameを適用します。

次のコードは、カレントフォルダの親フォルダを取得しています。

Sub buildPathTest2()
    Dim fso As New Scripting.FileSystemObject
    
    Debug.Print "【カレントフォルダ】" & CurDir
    Debug.Print "【親フォルダ】" & fso.GetAbsolutePathName(fso.BuildPath(CurDir, ".."))
    
End Sub

実行すると、次のような結果がイミディエイトウィンドウに表示されます。

【カレントフォルダ】C:\Users\xxx\Documents
【親フォルダ】C:\Users\xxx

更新日:2024/01/18

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

スポンサーリンク

記事の内容について

null

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

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

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

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

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

 

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