Excel VBA入門 | FileSystemObject-CreateFolderメソッド(フォルダの作成)

Excel VBA入門

公開日:2017年6月6日

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

ここでは、ファイルを作成する方法としてFileSystemObjectオブジェクトのCreateFolderメソッドを使用する方法を解説します。

FileSystemObject-CreateFolderメソッド(フォルダの作成)【Excel VBA入門】
目次

1.基本形

FSO.CreateFolder(FolderName) →オブジェクト(フォルダ)の作成(Folder型)

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

正常に動作した場合には、Folder型のオブジェクトを作成します。

2.使用例

次の例では、デスクトップ上に「Test」という名前のフォルダを作成した後に、フォルダの作成日時をメッセージ表示します。

Sub フォルダの作成()

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

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

MsgBox MyFolder.DateCreated    '(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を宣言しています。

CreateFolderで作成するファイルはFolder型のオブジェクトです。

従って、変数MyFolderに作成ファイルを代入する場合には、変数MyFolderはFolder型で宣言する必要があります。

(3)Set MyFolder = FSO.CreateFolder("C:\Users\ユーザー名\Desktop\Test")
→FileSystemオブジェクトのCreateFolderメソッドを使用して、デスクトップ上にTestフォルダを作成し、変数MyFolderに代入しています。

まず、作成したフォルダはオブジェクト型(CreateFolderメソッドで作成されるのは、オブジェクト型のうち、Folder型)です。String型と間違えやすいので注意が必要です(セル自体の取得とセルの値の取得の違いと似ています)。

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

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

また、FileSystemオブジェクトのCreateFolderメソッドで作成したファイルは上述の通り、Folder型のオブジェクトになりますが、このFolderオブジェクトは、FileSystemオブジェクトやFileオブジェクト、Driveオブジェクト、TextStreamオブジェクトと同列に並ぶ扱いで、FileSystemオブジェクトの系統に属するオブジェクトになります(すなわち、Sprictingのメンバー)。

Folderオブジェクトには、Folderを操作する様々なプロパティやメソッドが用意されています。後述(4)で使用しているDateCreatedプロパティはFolderオブジェクトのプロパティになります。

最後に、既にTestフォルダが存在する場合には実行時エラーとなります(実行時エラー58)

Excel VBA CreateFolder

(4)MsgBox MyFolder.DateCreated
→FolderオブジェクトのDateCreatedプロパティを使用して、フォルダ作成日時をメッセージ表示します。

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

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

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

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

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