フォルダーのパスとファイル名があって、これら結合してファイルへのパスを構築したいことがあると思います。例えば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
まとめ
いかがでしたでしょうか。いずれの方法も一長一短がありますが、どれも間違いではないので状況に合った方法を使用しましょう。
では、最後までお読みいただき誠にありがとうございました。