業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、ファイルの拡張子を取得するGetExtensionName、ファイル名を取得するGetFileName、「特殊フォルダ」を取得するGetSpecialFolderメソッドについて使い方を解説する。
TIPS「FileSystemObjectを使うための準備――ファイル/フォルダをコピーするには」では、ファイルシステムへアクセスするメソッドなどを提供するFileSystemObjectやMicrosoft Scripting Runtimeの参照設定などを紹介したが、今回は、ファイルの拡張子とファイル名を取得する方法と、特殊なフォルダを取得する方法について解説する。
ファイルの拡張子を取得するには、GetExtensionNameメソッドを使用する。これは、指定されたパスの拡張子を表す文字列を返すものだ。書式は下記のようになる。
{fso}.GetExtensionName({path})
{fso}は必須だ。FileSystemObjectオブジェクトの名前を指定する。
{path}も必須だ。拡張子を取り出す構成要素のパスを指定する。
VBEを起動して、「挿入」メニューから「標準モジュール」を選択して、Module1を作成し、リスト1のコードを記述する。新規にModuleを作成した場合は「Microsoft Scripting Runtimeの参照設定」を行うことを忘れないでほしい。
Sub ファイルの拡張子の取得() Dim fso As New Scripting.FileSystemObject Dim filePath As String Dim ExtentionName As String filePath="K:\ITmedia\Excel_FileSystemObject\1\FileSystemObject_01.docx" ExtentionName=fso.GetExtensionName(filePath) MsgBox(ExtentionName) Set fso=Nothing End Sub
新しいScripting.FileSyetemObjectのインスタンスを作成してfsoで参照する(2行目)。
文字列型の変数filePathを宣言する(3行目)。同じく、文字列型のExtentionName変数を宣言する(4行目)。
変数filePathにフルパスで拡張子を取得するファイル名を指定する(5行目)。試す場合は、各自のフォルダ内にあるファイルを指定してほしい。
変数ExtentionNameに、GetExtentionNameメソッドで、変数filePathに指定したファイル名の拡張子を取得して格納する(6行目)。
取得した拡張子を表示する(7行目)。
オブジェクト変数をNothingでクリアする(8行目)。
実行すると、図1のように表示される。
ファイル名を取得するには、GetFileNameメソッドを使用する。これは指定されたパスの最後のファイル名またはフォルダ名を返すメソッドだ。書式は下記のようになる。
{fso}.GetFileName({pathspec})
{fso}は必須だ。FileSystemObject オブジェクトの名前を指定する。
{pathspec}も必須だ。指定したファイルの絶対パスまたは相対パスを指定する。ただし、指定するパスは実在していなくても構わない。要は、最終要素のファイル名のみを返すのだ。
使い方としては、リスト2のコードを参考にしてほしい。
Sub ファイル名の取得() Dim fso As New Scripting.FileSystemObject Dim filePath As String filePath="K:\ITmedia\Excel_FileSystemObject\1\FileSystemObject_01.docx" Dim fileName As String fileName=fso.GetFileName(filePath) MsgBox fileName Set fso=Nothing End Sub
Scripting.FileSystemObjectのインスタンスを作成し、変数fsoで参照する(2行目)。
文字列型の変数filePathを宣言し、取得するファイル名をフルパスで指定しておく(3〜4行目)。
文字列型の変数fileNameを宣言する(5行目)。
GetFileNameメソッドで、変数filePathに格納したファイル名を取得して、変数fileNameに格納する(6行目)。
取得したファイル名を表示する(7行目)。
最後に、オブジェクトの変数をNothingでクリアしておく(8行目)。
実行すると図2のように表示される。
VBAにはGetSpecialFolderという、その名の通り、「特殊フォルダ」を取得するメソッドがある。
「特殊フォルダ」とは「デスクトップ」「マイドキュメント」「Windowsのセットアップ場所」「システムフォルダ」「一時フィルダ」を指す。しかし、「デスクトップ」「マイドキュメント」を取得するには、Scripting.FileSystemObjectではなく、WScript.Shellを使う必要があり、VBAではないので、本稿ではこれらのフォルダの取得はしない。
「Windowsのセットアップ場所」「システムフォルダ」「一時フィルダ」はScripting.FileSystemObjectで取得可能なので、今回はこれらのフォルダを取得する方法を解説する。書式は下記の通りだ。
{fso}.GetSpecialFolder({folderspec})
{fso}は必須だ。FileSystemObject オブジェクトの名前を指定する。
{folderspec}も必須だ。取得する「特殊フォルダ」の名前を指定する。{folderspec}には表1の指定項目がある。
定数 | 値 | 説明 |
---|---|---|
WindowsFolder | 0 | Windowsがセットアップされているフォルダ |
SystemFolder | 1 | システムファイル用のフォルダ |
TemporaryFolder | 2 | 一時ファイルの格納に使用されるTempフォルダ。このパスは TMP環境変数で指定されている |
参考「GetSpecialFolderメソッド-MSDN」 |
使い方としては、リスト3のコードを参考にしてほしい。
Sub 特殊フォルダを取得する() Dim fso As New Scripting.FileSystemObject Dim myObj1 As Object Dim myObj2 As Object Dim myObj3 As Object Set myObj1 = fso.GetSpecialFolder(0) Set myObj2 = fso.GetSpecialFolder(1) Set myObj3 = fso.GetSpecialFolder(2) MsgBox "Windowsファイルの場所は=" & myObj1.Path & vbCrLf & "システムフォルダの場所は=" & myObj2.Path & vbCrLf & "一時ファイルの場所=" & myObj3.Path Set fso = Nothing Set myObj1 = Nothing Set myObj2 = Nothing Set myObj3 = Nothing End Sub
Scripting.FileSystemObjectのインスタンスを作成し、変数fsoで参照する(2行目)。
Object型の変数myObj1からmyObj3を宣言する(3〜5行目)。
GetSpecialFolderメソッドの引数に表1の値を指定して、myObj1からmyObj3にセットしておく(6〜8行目)。
Pathプロパティを使用して、「特殊フォルダ」のパスを取得して表示する(9行目)。
最後に、全てのオブジェクトの変数をNothingでクリアしておく(10〜13行目)。
実行すると図3のように表示される。
今回は、ファイルの拡張子とファイル名を取得する方法と「特殊フォルダ」を取得する方法を紹介した。特に難しかった点はなかったと思う。Excelにおいても、フォルダやファイル操作が必要になる場合があると思う。その場合は、本TIPSを参考にしてほしい。
次回は、フォルダを取得する方法、親フォルダのパスを取得する方法について解説する。お楽しみに。
薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。
1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。
1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。
2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。
Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。
Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。
Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。
Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。
Microsoft MVP for Development Platforms - Windows Platform Development (Oct 2014-Sep 2015)。
Copyright © ITmedia, Inc. All Rights Reserved.