InStrRev関数の使い方
ファイルのフルパスからフォルダパスの部分とファイル名の部分とに分けるためには「InStrRev関数」という関数を使って分けています。
InStrRev関数の読み方は「インエスティーアールリバース」または「インストリングリバース」と読みます。
InStrRev関数の構文は↓のように記述します。
InStrRev関数は指定した文字列から検索文字を探してくれるのですが、文字列の最後の文字から探して見つかった文字位置を返してくれる関数です。
ファイルのフルパスからフォルダパスとファイル名に分けたいときは、文字列の後ろから探して最初にある「¥」を探したいですよね。
C:\Users\Owner\Desktop\sample\ブックA.xlsx
さいごの「¥」が何文字目かが分かれば、あとはLeft関数やRight関数を使って文字列から指定した位置までを取得することができます。
↑のファイルパスの例で言うと、最後の「¥」の位置は30文字目にあります。
フォルダパスの部分だけを取り出したい場合は左から29文字目までを取り出したいので、Left(フルパス,30-1)とすればフォルダパスの部分だけを取り出すことが可能です。
ファイル名だけを取り出したい場合は逆に右側から数えてファイル名の部分だけを取り出したいのでRight関数を使用します。全体の文字数(39)から最後の「¥」の30文字目までを引いた「9文字」を出力します。式は Right(フルパス,Len(フルパス)-30)となります。
ファイルのフルパスからフォルダパスとファイル名に分ける方法
サンプルマクロを使って説明していきます。
マクロ実行前の状態です。
B1セルにファイルのフルパスが書かれています。
このフルパスからフォルダパスのみ、ファイル名のみを取り出してB2セルとB3セルに出力します。

サンプルマクロで実行している内容
①B1セルのファイルパスを取得する
②フォルダパスをB2セルに出力する
③ファイル名をB3セルに出力する
Sub sample1()
Dim FilePath As String
'B1セルのファイルパスを取得する…⓵
FilePath = Worksheets(1).Range("B1")
'フォルダパスをB2セルに出力する…⓶
Worksheets(1).Range("B2") = Left(FilePath, InStrRev(FilePath, "\") - 1)
'ファイル名をB3セルに出力する…⓷
Worksheets(1).Range("B3") = Right(FilePath, Len(FilePath) - InStrRev(FilePath, "\"))
End Sub
マクロ実行後の状態です。
B2セルにフォルダパスが出力されて、B3セルにファイル名のみが出力されています。

ダイアログで選択されたファイルのフォルダパスとファイル名を取得する方法
次はダイアログで選択したファイルのフルパスからフォルダパスとファイル名だけを取り出して出力します。
マクロ実行前の状態です。B列はすべて空欄にしておきます。

サンプルマクロで実行している内容
①ダイアログで選択されたファイルパスを取得する
②ファイルのフルパスをB1セルに出力する
③フォルダパスのみをB2セルに出力する
④ファイル名のみをB3セルに出力する
Sub sample2()
Dim FilePath As String
'ダイアログで選択されたファイルパスを取得する…⓵
FilePath = Application.GetOpenFilename()
'フルパスをB1セルに出力する…⓶
Worksheets(1).Range("B1") = FilePath
'フォルダパスをB2セルに出力する…⓷
Worksheets(1).Range("B2") = Left(FilePath, InStrRev(FilePath, "\") - 1)
'ファイル名をB3セルに出力する…⓸
Worksheets(1).Range("B3") = Right(FilePath, Len(FilePath) - InStrRev(FilePath, "\"))
End Sub
マクロを実行するとファイル選択ダイアログが開きます。
今回はブックB.xlsxを選択して「開く」ボタンをクリックします。

マクロ実行後の状態です。
B列にファイルのフルパスとフォルダパスのみ、とファイル名のみが出力されています。

InStr関数の記事
InStr関数を使った記事は↓で紹介しています。
※コードのコピー利用について
・コードのコピーは自由におこなっていただけます。
・気を付けて作成はしていますがコードには誤りがある可能性があります。
・自身の環境で動作確認をしていますが、すべての方の環境で同様に動くことは保証できません。
・データの破損等の責任は負いかねますのでご自身の責任のもとお使いください。
・記事の内容は適宜変更することがありますのでご了承ください。