こんにちは、Ryoです。
ファイルを扱う際にフルパス(ファイルやフォルダがコンピューター上で保存されている場所)を取得して利用するケースは多いと思いますが、その中からファイル名のみを取り出して使用したい場合にはInStrRev関数やRight関数、Replace関数などを用いて処理することができますので、今回はその内容について書いていきます。
1.サンプル概要
動作自体は単純なものなので概要というほどでもないのですが、実行元ファイルのフルパスが「C:\デスクトップ\InStrRev関数\File名抽出Sample.xlsm」となっているので、サンプルコードを実行しファイル名のみを抽出してメッセージボックスで表示させます。
このようにファイル名を抽出できますので、以下にサンプルコードなどを書いていきます。
2.サンプルコード
◆InStrRev関数/Right関数を利用して抽出
Sub Sample1() '***InStrRev関数を利用してファイル名を抽出*** Dim adr As String Dim pos As String '現ブック(実行元)のフルパスを取得する adr = ThisWorkbook.FullName 'フルパスに対し、文字列最後から"\"の位置を取得 'パスは C:\*****\****\ファイル名.拡張子 のようになっているので、 '文字列最後から"\"がファイル名直前の位置になる pos = InStrRev(adr, "\") 'Right関数でフルパスの右側から区切り文字'\"の位置までの '文字数分を取得してメッセージボックス表示 MsgBox "ファイル名 : " & Right(adr, Len(adr) - pos) End Sub
InStrRev関数は文字列の最後から指定した文字の位置を検索し、その位置を返してくれるものです。
構文:InStrRev(string1,string2[, start[, compare]])
string1に指定した文字列からstring2に指定した文字列を検索し、その文字の位置を返してくれます。
サンプルコードではフルパスを格納した変数adrをstring1に指定し、その中にある区切り文字をstring2に指定して位置を取得しています。
ファイル名の文字数はフルパス全体の文字数から、この区切り文字の位置までの文字数を引いた数になりますので、フルパスの文字列右側からファイル名の文字数分をRight関数で取得することでファイル名となります。
構文:Right(str, length)
pos = InStrRev(adr, “\”)
MsgBox “ファイル名 : ” & Right(adr, Len(adr) – pos)
◆Replace関数を利用して抽出
Sub Sample2() '***Replace関数を利用してファイル名を抽出*** Dim adr As String Dim Fname As String '現ブック(実行元)のフルパスを取得する adr = ThisWorkbook.FullName '保存場所を記述してReplace関数によるトリミングを行うことで 'ファイル名のみを抽出する事も可能 Fname = Replace(adr, "C:\*****\*****\", "") '取得内容をメッセージボックスで表示 MsgBox "ファイル名 : " & Fname End Sub
実行結果はこちらも同様になりますが、Replace関数を利用して指定文字列を別の文字列に置換(この場合は削除)することでファイル名を抽出することもできます。
構文:Replace(expression,find,replace[,start[,count[,compare]]])
引数expressionに指定文字列、引数findに指定した文字(本サンプルであれば “C:\デスクトップ\InStrRev関数\” )、引数replaceに置換後の文字を指定します。この場合はフルパスの文字列に対してファイル名を除く文字列を指定し、その文字列を””(なし)に置換することでトリミングされますので、結果的にファイル名が残るということになります。
3.まとめ
以前に投稿しているVBA関連記事内で処理の一環としてファイル名を抽出する方法にも触れていたのですが、本内容は利用頻度的にも高いと思いますので改めて「フルパスからファイル名を取り出す」方法として投稿した次第です。
主にはInStrRev関数を利用して対処しますが、抽出したい文字列の自由度が高いのはReplace関数を利用した場合なので、利用環境に応じて使い分けていくと良いと思います。
以上、フルパスからファイル名を抽出する方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo