Excel VBA

【Excel VBA】フォルダーのパスとファイル名を結合する

投稿日:

フォルダーのパスとファイル名があって、これら結合してファイルへのパスを構築したいことがあると思います。例えばpath変数に「C:¥vba」という文字列が格納されていて、name変数に「sample.xlsx」という文字列が格納されているとします。この場合、これらを結合して「C:¥vba¥sample.xlsx」というパスを構築したい場合です。

これを行う方法はいくつかありますがで、順に解説していきましょう。

文字列の結合を使ってパスを構築する

まず最初に思いつくのは次のように文字列の結合を使って構築する方法でしょう。

path & "¥" & name

path変数とname変数に前述のような文字列が格納されている場合、これは「C:¥vba¥sample.xlsx」という文字列が作成されます。これはこれで目的を達せられているので問題はないのですが、この方法はパス区切り文字がハードコーディングされているので、Windows環境でしか機能しないという欠点があります。

パス区切り文字にApplication.PathSeparatorプロパティを使う

先ほどの欠点を改善してみましょう。それにはApplication.PathSeparatorプロパティを使います。このプロパティは、実行されているシステムのパス区切り文字を返すので、Windows環境では「¥」、Mac環境では「/」が使われます。改善したコードは次のようになります。

path & Application.PathSeparator & name

しかし、ここでも少し注意する点があります。これまでのコードはpath変数の文字列がパス区切り文字で終わっていないことが前提となっています。もしpath変数に「C:¥vba¥」のようにパス区切り文字で終わっている文字列が格納されている場合、「C:¥vba¥¥sample.xlsx」のようにパス区切り文字が2つ重なってしまいます。

FileSystemObjectのBuildPathメソッドを使う

最後に先ほどのパス区切り文字が2つ重なってしまう点を改善してみましょう。それにはFileSystemObjectのBuildPathメソッドを使います。ただし残念なことに、FileSystemObjectはMacでは使用できません。

まずはメソッドの構文をみてみましょう。

FileSystemObjectオブジェクト.BuildPath(パス, 名前)

BuildPathメソッドは引数のパスと名前を結合してパスを構築するメソッドです。このメソッドでは結合するときの区切り文字は”必要であれば”挿入されます。つまり「pathがパス区切り文字で終わっているのか」ということを気にする必要がなくなります。ただしこの方法はタイプするコードが少しだけ多くなるのが欠点でしょう。

サンプルコード

ここまでに説明した動作を確認するサンプルコードを紹介して終わりにしましょう。FileSystemObjectはMacでは使用できないので、Mac環境で実行する場合は、FileSystemObjectを使用する部分はコメントあるとするか、削除して実行してください。

Sub sample()
    Dim path As String
    Dim path2 As String
    Dim name As String
    Dim fso As New FileSystemObject
    
    path = ThisWorkbook.path
    path2 = path & Application.PathSeparator
    name = "sample.xlsx"
    
    ' 1つ目に説明した方法
    MsgBox path & "\" & name
    ' 2つ目に説明した方法
    MsgBox path & Application.PathSeparator & name
    ' 3つ目に説明した方法
    MsgBox fso.BuildPath(path, name)
    ' パス区切り文字が重なってしまう
    MsgBox path2 & Application.PathSeparator & name
    ' パス区切り文字は重ならない
    MsgBox fso.BuildPath(path2, name)
End Sub

まとめ

いかがでしたでしょうか。いずれの方法も一長一短がありますが、どれも間違いではないので状況に合った方法を使用しましょう。

では、最後までお読みいただき誠にありがとうございました。

-Excel VBA

Copyright© アナグマのモノローグ , 2025 All Rights Reserved Powered by STINGER.