和風スパゲティのレシピ

日本語でコーディングするExcelVBA

パスからフォルダ名やファイル名を取得する

パスからファイル名・フォルダ名を取得する方法を解説します。

InstrRev関数で「\」を検索する方法

C:\Users\ユーザー名\Documents\売上データ
から「売上データ」というフォルダ名を取得したり、

C:\Users\ユーザー名\Documents\売上データ\売上データ(2021.9).xlsx
から「売上データ(2021.9).xlsx」というファイル名を取得したい場合は、

文字列を「右から」探すInstrRev関数を使用して、
「一番右にある\より右側の部分」を取得します。

 

フォルダ名 = Mid(フォルダパス, InstrRev(フォルダパス, "\") + 1)

ファイル名 = Mid(ファイルパス, InstrRev(ファイルパス, "\") + 1)

 
InstrRev関数はInstr関数の「右から探す」版ですが、
見つかったときにはInstr関数と同じく「左から何文字目か」を返してくれます。

なので、Instr関数を組む時と同じように書けば問題なく動きます。


また、Mid関数は「○文字目から△文字」取ってくる関数ですが、
△を省略した場合は右側の残りの文字をすべて取ってきてくれます。


フォルダ名の文字数よりも「\」の位置の方が調べやすかったように、
文字数より位置の方が取得しやすいことが多いため、
Right関数よりも右側を取ってくるのが上手な関数です。

覚えておきましょう。

Dir関数を使った裏技

基本のコードは上記の通りですが、
Dir関数の性質を知っていると、もっと簡単なコードでもいけます↓

ファイル名 = Dir(ファイルパス)

フォルダ名 = Dir(フォルダパス, vbDirectory)

 
Dir関数は「フォルダ内の全ファイルをループ」するときによく使う関数で、
Dir(フォルダパス\*.xlsx)と、「*」を使って複数のファイルを探せます。


「*」を渡されたDir関数さんは、該当するファイルを見つけるたびに「ファイル名」を返していくのですが、

「*」を使わずにファイルを断定すれば、
単純にそのファイル名を返す関数としても使える
ということですね。


同じことをフォルダでやりたいときは、
第2引数に「vbDirectory」を渡してあげてください。


ただし、Dir関数は「ファイルがなければ""を返す」という仕様ですので、
まだ作っていないファイルのパスからファイル名を取得することはできません。

「作成予定のパスを受け取って、これからフォルダやファイルを作る」マクロでは使えませんので、その時は素直にInstrRev関数のコードを使用してください。