パスを含むファイル名からファイル名のみを抽出するマクロ [すぐに使えるエクセル・マクロ集]
2つファイルを開いて、それぞれのファイルを行き来きする
前回「Excelファイルを開くマクロ」 を紹介しましたが、2つファイルを開いて、それぞれのファイルを行き来しながらデータをやり取りする際、「とりあえず使えるエクセルVBAマクロ超入門 / ExcelVBA特有の基本構文」で紹介した、
複数のワークブック(既に開かれているエクセルファイル)が存在し、データのやり取りをする場合は、次のように記述してそのワークブックを選びます。
Windows("Book1.xls").Activate → Book1.xlsを選びます。
というケースがでてきます。ただ、Application.GetOpenFilenameで取得したファイル名は「C:\Documents and Settings\・・・・・\book.xls」のように、 パスを含めた文字列となってしまいます。
そこで、「book.xls」といったように、ファイル名だけを取得する必要が出てくるわけです。このようにファイル名のみが必要になるケースが種々出てくるため今回、パスを含むファイル名からファイル名のみを抽出するマクロを紹介することとしました。
考え方
考え方はいたって簡単。パスを含むファイル名の文字列(A)から、パスのみの文字列(B)を差し引くのみ。
(A)パスを含むファイル名
C:\Documents and Settings\・・・・・\新しいフォルダ\book.xls
(B)パスのみの文字列
C:\Documents and Settings\・・・・・\新しいフォルダ
サンプルコード
Sub extract_filename()
'=======================================
'
' パスを含むファイル名からファイル名のみを抽出するマクロ
'
'=======================================
'Fileの選択
filename_path = Application.GetOpenFilename("ファイル名,*.*")
If filename_path = "False" Then
MsgBox ("マクロを中止します")
End
End If
'ドライブの検出
drive00 = Left(filename_path, 1)
'パスの検出
filepath = CurDir(drive00)
'文字列数のカウント:(A)パスを含むファイル名
length_path_A = Len(filename_path)
'文字列数のカウント:(B)パスのみの文字列
length_path_B = Len(filepath)
'文字列数のカウント:ファイル名のみ
length_filename = length_path_A - length_path_B - 1 '「-1」は\マーク分
'ファイル名の抽出
filename00 = Right(filename_path, length_filename)
'ファイル名の表示(このマクロでのアウトプットの確認用)
MsgBox filename00
End Sub
重要構文
(1)Len([文字列A])
[文字列A]の文字数を返します。
(2)Left([文字列B],[正の整数C])
[正の整数C]の数だけ[文字列B]の左から抽出します。
右から抽出する場合はRight([文字列B],[正の整数C])。
(3)CurDir([ドライブD])
[ドライブD]で指定されるドライブの現在のパスを返します。
[ドライブD]を省略すると、現在のドライブのパスを返します。
(4)MsgBox [E]
[E]で指定される文字列、数値などの値を返します。(このマクロでのアウトプットの確認用)
重要構文の組み合わせ
今回紹介したマクロ、よくよく見てみると、重要構文で紹介した基本的な構文の組み合わせでしかありません。
のちのち、「なーんだこんな便利なやり方があったんだー」とスペシャルなやり方を知ることもしばしばですが、はじめから便利なやり方を探してばかりだと、進まないことがあります。
このように、工夫しながら基本構文の組み合わせて対応していく「チカラ技」。結構、好きです。
スポンサーリンク