Excel VBA入門 | FileSystemObject-GetFolderメソッド(フォルダの取得)

Excel VBA入門

公開日:2017年6月2日

FileSystemObjectオブジェクトは、Windowsスクリプトテクノロジの1つであるScriptランタイムに属したオブジェクトです(Excel VBA上ではScriptingのメンバに位置づけされています)。

ここでは、フォルダを取得する方法としてFileSystemObjectオブジェクトのGetFolderメソッドを使用する方法を解説します。

FileSystemObject-GetFolderメソッド(フォルダの取得)【Excel VBA入門】
目次

1.基本形

FSO.GetFolder(FolderName) →オブジェクト(Folder型)

変数説明
FSOFileSystemオブジェクト変数。FileSystemオブジェクトとして宣言して格納した変数です。
引数説明
FolderNameフォルダ名。絶対パスまたは相対パスを指定します。

フォルダが存在すればそのフォルダをFolder型のオブジェクトとして取得します。フォルダが存在しない場合にはエラーになります。

2.使用例

次の例では、デスクトップ上のTestフォルダを取得し、フォルダ名をメッセージ表示します。

Sub フォルダの取得()

Dim FSO As New FileSystemObject  '(1)
Dim MyFolder As Folder           '(2)
'変数名は自由に設定してください。

Set MyFolder = FSO.GetFolder("C:\Users\ユーザー名\Desktop\Test")   '(3)
'ユーザー名はあなたのPC環境に合わせて書き換えてください。

MsgBox MyFolder.Name   '(4)

End Sub

【解説】

(1)Dim FSO As New FileSystemObject
→FileSystemObjectオブジェクトを使用する際のおまじないです。FileSystemObjectオブジェクト変数FSOの宣言と変数FSOにFileSystemObjectオブジェクトの参照への代入を同時に1行で行っています。

おまじないには事前バインディングと実行時バインディングがありますが、ここでは事前バインディングを使用しています。

なお、FileSystemObjextオブジェクトを使用する場合には前もって、参照設定で「Microsoft Scripting Runtime」を有効にしておきます。

※FileSystemObjectオブジェクトの設定は「Excel VBA入門 | FileSystemObjectオブジェクト(概要)」を参照ください。

(2)Dim MyFolder As Folder
→フォルダを取得して格納する変数を使用するので、Folder型のオブジェクト変数MyFolderを宣言しています。

(3)Set MyFolder = FSO.GetFolder("C:\Users\keisuke_suto\Desktop\Test")
→FileSystemObjectオブジェクトのGetFolderメソッドを使用してフォルダを取得しています。

フォルダ名ではなく、フォルダそのものを取得します(セル自体の取得とセルの値の取得の違いと似ています)。

そこで、Folder型のオブジェクト変数であるMyFolderを(2)で宣言しました。ファイル名を取得するのであれば、Folder型ではなく、String型として宣言します。

オブジェクト変数(今回の例ではFolder型)に代入する場合には、「Set ~」ステートメントを使用して設定します。フォルダ名であればString型の変数に代入するため、「Set~」ステートメントは使用しません。

(4)MsgBox MyFile.Name
→ファイル名をメッセージ表示しています。

ファイルが存在すればファイル名を表示しますが、ファイルが存在しなければエラーとなります(実行時エラー53)。

Excel VBA GetFolder

GetFolderメソッドを使用してフォルダを取得しました。すると、Folderオブジェクトに属するプロパティやメソッドを使用することができます。NameプロパティはFolderオブジェクトのプロパティです。MyFolder.Nameでフォルダ名を取得することができます。

「MsgBox」の後ろにくるメッセージは、String型を設定します。従って、MyFolderではFolder型(オブジェクト型)のため、エラーになりますが、MyFolder.NameはString型であるため、問題なくメッセージが表示されます。

FolderオブジェクトもFileSystemObjectオブジェクトの系統に属するオブジェクトになります。

【補足】Folderオブジェクトの位置づけ

FolderオブジェクトはFileSystemObjectオブジェクトの系統に属すると記載しましたが、FolderオブジェクトはFileSystemObjectオブジェクトに属する訳ではありません。

この2つのオブジェクトはVBE上では同じSctiptingライブラリのメンバーになります(同列の扱い)。従って、FileSystemObjectオブジェクトとFolderオブジェクトにはそれぞれ別々のプロパティやメソッドが存在します。FileSystemObjectオブジェクトのプロパティやメソッドをFolderオブジェクトでは扱うことはできません。またその逆もしかりです。

この点、ややこしい話になるのは言葉の問題によるものです。「MSDN ライブラリ」を見ると分かりますが、FileSystemObjectオブジェクトやFolderオブジェクトをまとめて「FileSystemObjectオブジェクト」という用語で説明しています。

要するに「FileSystemObjectオブジェクト」を2つの意味で用いていることが、VBA上のFileSystemObjectオブジェクト系統の文法の理解を難しくしています。