【VBA】ファイル名・パスを取得する

Excel・VBA

エクセルファイルやテキストファイル(txtやcsv)をワークブックとして開いた際のファイル名・パスの取得に関する方法を紹介します。

【今回の内容】
1.自分のファイル名・パスを取得する
2.現在アクティブなファイルの名前・パスを取得する
3.取得したファイル名から拡張子を取り除く

自分のファイル名・パスを取得する

自分=マクロを実行しているファイルについて名前・パスを取得する方法です。

ファイル名・パスの取得方法の書式は、ほぼ同じです。ファイル名なら”Name”、パスなら”Path”を用いて次のように書きます。

《自分のファイル名を取得》
 変数名 = ThisWorkbook.Name
《自分のパスを取得》
 変数名 = ThisWorkbook.Path
 変数名:文字列型(String

なお、ファイル名やパスを格納する変数は、文字列型で宣言しておきます。

現在アクティブなファイルの名前・パスを取得する

現在アクティブなファイルについては、”ActiveWorkbook”を用います。

《アクティブなファイルの名前を取得》
 変数名 = ActiveWorkbook.Name
《アクティブなファイルのパスを取得》
 変数名 = ActiveWorkbook.Path
 ※変数名:文字列型(String)

取得したファイル名から拡張子を取り除く

取得したファイル名から拡張子を取り除く方法について、次の2通りの方法を紹介します。

《拡張子名がわかっている場合》拡張子の取り除き方

拡張子名がわかっている場合、Replace関数を用いて取り除くことが可能です。Replace関数の書式と拡張子の取り除き方は次のように書きます。

《Replace関数の書式》
 Replace(対象の文字列 , 置き換えたい文字列 , 置き換え後の文字列, [検索開始位置] , [置き換える文字列の数] , [比較の方法] ) 
※[]内は省略可。 今回の方法には関係ないので説明を省きます。

《拡張子を取り除く方法》
 変数 = Replace(拡張子を含むファイル名 , 拡張子名 , “”
 ※変数:文字列型(String)

拡張子名は””(ダブルクオテーション)で囲むのを忘れないようにしましょう。置き換え後の文字列は””です。

《拡張子名が不明な場合》拡張子の取り除き方

拡張子が不明な場合は、InStrRev関数とLeft関数を利用します。 InStrRev 関数は、調べたい文字列が検索対象の文字列の中で後ろから数え、前から何番目にあるかを取得する関数です。

まずはInStrRev関数の書式です。

《InStrRev書式》
 InStrRev(対象の文字列 , 調べたい文字列 , [検索開始位置] , [比較の方法]
 ※[]内は省略可能です。今回の方法には関係ないので説明を省きます。

次にLeft関数についてです。Left関数は、文字列の左側から指定した数の文字を抜き出す関数です。

《Left関数の書式》
 変数 = Left(対象の文字列 , 抜き出す数
 ※変数:文字列型(String)

これらを組み合わせて取得したファイル名から拡張子を取り除く方法は次のように書きます。

《ファイル名から拡張子を取り除く》
 変数 = Left(対象の文字列 , InStrRev(対象の文字列 , “.”)- 1) 
 ※変数:文字列型(String)

InStrRev(対象の文字列 , “.”)で拡張子の前の”.”が文字列の前から何番目にあるのかを取得します。ファイル名だけを抜き出すには”.”は必要ないので、”.”の前までを取得します。なので、マイナス1をしています。

InStrRev(対象の文字列 , “.”)-1をLeft関数の抜き出す数に指定すると、対象の文字列からファイル名に相当する部分だけが取得できます。

サンプルコード(ファイル名から拡張子を取り除く)

 Sub filename_sample()
  Dim fpath As String
  Dim fname As String
  Dim ext As String
   fpath = ThisWorkbook.Path
   fname = ThisWorkbook.Name
   MsgBox (fpath & vbLf & fname)
   fname = Left(fname, InStrRev(fname, ".") - 1)
   MsgBox (fname)
 End Sub
サンプルコードの説明

コメント

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