OfficeType

VBA~フルパスからファイル名を抽出しよう~Excel

VBAでフルパスからファイル名を抽出したい場合は、まずファイル名の左隣の\がパスの先頭から数えて何文字目かを取得します。ファイル名はパスの先頭から数えて取得した数値+1から始まりパスの末尾までになります。

ファイル名の左隣の\がパスの先頭から数えて何文字目かを取得するにはInStrRev関数を使います。InStrRev関数はInStrRev(文字列,検索文字)で、文字列の末尾から検索し検索文字が最初に見つかった位置が文字列の先頭から何文字目かを返します。

文字列にパスを指定し、検索文字に\を指定すればファイル名の左隣の\がパスの先頭から数えて何文字目かを取得できます。

取得した数値からファイル名を抽出するにはMID関数を使います。MID関数はMID(文字列,開始位置,文字数)で文字列の先頭から数えて開始位置で指定した値の位置から文字数分の文字列を抽出します。文字数を省略すると開始位置から文字列の末尾までを抽出するので、これを利用してファイル名を抽出できます。文字列にパスを指定し、開始位置にInStrRev関数で取得した値+1を指定すればパスからファイル名が抽出できます。

例として下のコードを実行するとD:\サンプル\test.xlsxからtest.xlsxというファイル名を抽出しメッセージボックスうに表示します。

Sub test1()

Dim Spos As Long
Dim Fname As String

Spos = InStrRev("D:\サンプル\test.xlsx", "\")
Fname = Mid("D:\サンプル\test.xlsx", Spos + 1)
MsgBox Fname

End Sub

image-01

コードの説明

Dim Spos As Long

Sposという変数は整数だと定義しています。

Dim Fname As String

Fnameという変数は文字列だと定義しています。

Spos = InStrRev("D:\サンプル\test.xlsx", "\")

変数SposにInStrRev関数でファイル名test.xlsxの左隣の\がパスの先頭から数えて何文字目かを取得しています。

Fname = Mid("D:\サンプル\test.xlsx", Spos + 1)

変数FnameにMid関数を使ってファイル名を取得しています。

MsgBox Fname

メッセージボックスでファイル名を表示しています。