Excel VBA入門 | FileSystemObject-GetFileメソッド(ファイルの取得)

Excel VBA入門

公開日:2017年5月26日

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

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

FileSystemObject-GetFileメソッド(ファイルの取得)【Excel VBA入門】
目次

1.基本形

FSO.GetFile(FileName) →オブジェクト(File型)

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

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

2.使用例

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

Sub ファイルの取得()

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

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

MsgBox MyFile.Name   '(4)

End Sub

【解説】

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

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

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

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

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

(3)Set MyFile = FSO.GetFile("C:\Users\ユーザー名\Desktop\Test.txt")
→FileSystemObjectオブジェクトのGetFileメソッドを使用してファイルを取得しています。

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

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

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

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

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

Excel VBA GetFile

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

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

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

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

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

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

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

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