FileSystemObjectのGetBaseNameメソッド
FileSystemObjectのGetBaseNameメソッドは、引数で指定されたパスの最下層のフォルダ名または拡張子を除いたファイル名を返します。
「C:\aaa\bbb\ccc.txt」 → 「ccc」
通常は、拡張子を除いたファイル名部分だけを抽出したい場合に利用されることが多いです。
フォルダパスを渡した場合は最下層のフォルダ名だけが返されます。
引数で渡されたパスが存在していなくても文字列だけで判定するため問題ありません。
環境変数の%windir%のような文字列を引数に渡してフォルダ展開されることを期待しても、実際には実フォルダには展開されず”%windir%”という文字列のみを判定するため期待通りの動き(フォルダ展開後の”C:¥Windows”の”Windows”が返却される動き)にはなりません。
環境変数を展開させたい場合はEnviron関数を使って展開された上で引数に渡すことでフォルダ展開後の文字列からパスの最下層の名前が返されます。
FileSystemObjectの他のメソッドやプロパティは「FileSystemObjectとTextStreamのメソッド・プロパティ一覧」をご参照ください。
構文
Function GetBaseName(Path As String) As String
Path | ファイルパスまたはフォルダパスを指定します。環境変数の%windir%などは実フォルダには展開されません。 |
戻り値 | 引数のパスの最下層を返します。拡張子部分はドット文字も含めて除去されます。 |
事前設定
以下のサンプルコードでは参照設定でFileSystemObjectクラスを利用できるようにしています。
FileSystemObjectクラスを利用するには、事前にVBA画面→ツールメニュー→参照設定、を選択し、参照設定ダイアログで「Microsoft Scripting Runtime」にチェックを付けます。
詳細は「VBAでのFileSystemObjectとTextStreamの使い方」の事前設定をご参照ください。
サンプルコード
アクティブブックや環境変数などの各引数を使ってGetBaseNameメソッドを実行するサンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub FileSystemObjectGetBaseName() Dim fso As New FileSystemObject '// FileSystemObjectクラス Dim sPath As String '// 戻り値 sPath = fso.GetBaseName(ActiveWorkbook.Path & "\a.xlsx") Debug.Print sPath sPath = fso.GetBaseName(ActiveWorkbook.Path & "\aaa\bbb") Debug.Print sPath sPath = fso.GetBaseName("%windir%") Debug.Print sPath sPath = fso.GetBaseName(Environ("windir")) Debug.Print sPath sPath = fso.GetBaseName("C:\Windows") Debug.Print sPath End Sub |
実行結果
a
bbb
%windir%
Windows
Windows