連載
» 2017年04月20日 05時00分 UPDATE

VBA/マクロ便利Tips:VBAでファイル名や拡張子を取得する方法、特殊フォルダを取得する方法

業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、ファイルの拡張子を取得するGetExtensionName、ファイル名を取得するGetFileName、「特殊フォルダ」を取得するGetSpecialFolderメソッドについて使い方を解説する。

[薬師寺国安,PROJECT KySS]
「VBA/マクロ便利Tips」のインデックス

連載目次

※本Tipsの環境:Windows 10 64bit+Anniversary Update、Excel 2016


 TIPS「FileSystemObjectを使うための準備――ファイル/フォルダをコピーするには」では、ファイルシステムへアクセスするメソッドなどを提供するFileSystemObjectやMicrosoft Scripting Runtimeの参照設定などを紹介したが、今回は、ファイルの拡張子とファイル名を取得する方法と、特殊なフォルダを取得する方法について解説する。

ファイルの拡張子を取得するGetExtensionNameメソッド

 ファイルの拡張子を取得するには、GetExtensionNameメソッドを使用する。これは、指定されたパスの拡張子を表す文字列を返すものだ。書式は下記のようになる。

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
リスト1 ファイルの拡張子を取得するコード

 新しいScripting.FileSyetemObjectのインスタンスを作成してfsoで参照する(2行目)。

 文字列型の変数filePathを宣言する(3行目)。同じく、文字列型のExtentionName変数を宣言する(4行目)。

 変数filePathにフルパスで拡張子を取得するファイル名を指定する(5行目)。試す場合は、各自のフォルダ内にあるファイルを指定してほしい。

 変数ExtentionNameに、GetExtentionNameメソッドで、変数filePathに指定したファイル名の拡張子を取得して格納する(6行目)。

 取得した拡張子を表示する(7行目)。

 オブジェクト変数をNothingでクリアする(8行目)。

 実行すると、図1のように表示される。

図1 ファイルの拡張子が取得されて表示された

ファイル名を取得するGetFileNameメソッド

 ファイル名を取得するには、GetFileNameメソッドを使用する。これは指定されたパスの最後のファイル名またはフォルダ名を返すメソッドだ。書式は下記のようになる。

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
リスト2 ファイル名を取得するコード

 Scripting.FileSystemObjectのインスタンスを作成し、変数fsoで参照する(2行目)。

 文字列型の変数filePathを宣言し、取得するファイル名をフルパスで指定しておく(3〜4行目)。

 文字列型の変数fileNameを宣言する(5行目)。

 GetFileNameメソッドで、変数filePathに格納したファイル名を取得して、変数fileNameに格納する(6行目)。

 取得したファイル名を表示する(7行目)。

 最後に、オブジェクトの変数をNothingでクリアしておく(8行目)。

 実行すると図2のように表示される。

図2 ファイル名を取得した

「特殊フォルダ」を取得するGetSpecialFolderメソッド

 VBAにはGetSpecialFolderという、その名の通り、「特殊フォルダ」を取得するメソッドがある。

 「特殊フォルダ」とは「デスクトップ」「マイドキュメント」「Windowsのセットアップ場所」「システムフォルダ」「一時フィルダ」を指す。しかし、「デスクトップ」「マイドキュメント」を取得するには、Scripting.FileSystemObjectではなく、WScript.Shellを使う必要があり、VBAではないので、本稿ではこれらのフォルダの取得はしない。

 「Windowsのセットアップ場所」「システムフォルダ」「一時フィルダ」はScripting.FileSystemObjectで取得可能なので、今回はこれらのフォルダを取得する方法を解説する。書式は下記の通りだ。

GetSpecialFolderメソッドの書式

{fso}.GetSpecialFolder({folderspec})


 {fso}は必須だ。FileSystemObject オブジェクトの名前を指定する。

 {folderspec}も必須だ。取得する「特殊フォルダ」の名前を指定する。{folderspec}には表1の指定項目がある。

表1 folderspecの指定項目
定数 説明
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
リスト3 「特殊フォルダ」を取得するコード

 Scripting.FileSystemObjectのインスタンスを作成し、変数fsoで参照する(2行目)。

 Object型の変数myObj1からmyObj3を宣言する(3〜5行目)。

 GetSpecialFolderメソッドの引数に表1の値を指定して、myObj1からmyObj3にセットしておく(6〜8行目)。

 Pathプロパティを使用して、「特殊フォルダ」のパスを取得して表示する(9行目)。

 最後に、全てのオブジェクトの変数をNothingでクリアしておく(10〜13行目)。

 実行すると図3のように表示される。

図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© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。