PR
スポンサーリンク

【ExcelVBA】ファイルパスからフォルダパスだけ、ファイル名だけを取り出す(InStrRev関数)

スポンサーリンク
VBA-ファイルパスパスからフォルダパスとファイル名を取り出す-アイキャッチ 関数
スポンサーリンク
スポンサーリンク
スポンサーリンク

InStrRev関数の使い方

ファイルのフルパスからフォルダパスの部分とファイル名の部分とに分けるためには「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セルに出力します。

ExcelVBA_マクロ実行前

サンプルマクロで実行している内容
①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セルにファイル名のみが出力されています。

ExcelVBA_マクロ実行後
スポンサーリンク

ダイアログで選択されたファイルのフォルダパスとファイル名を取得する方法

次はダイアログで選択したファイルのフルパスからフォルダパスとファイル名だけを取り出して出力します。

マクロ実行前の状態です。B列はすべて空欄にしておきます。

ExcelVBA_マクロ実行前_ダイアログでファイルを選択

サンプルマクロで実行している内容
①ダイアログで選択されたファイルパスを取得する
②ファイルのフルパスを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を選択して「開く」ボタンをクリックします。

ExcelVBA_ダイアログでファイルを選択

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

ExcelVBA_マクロ実行後_ファイルを選択
スポンサーリンク

InStr関数の記事

InStr関数を使った記事は↓で紹介しています。

スポンサーリンク

※コードのコピー利用について

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

タイトルとURLをコピーしました