Excel VBA入門 | FileSystemObject-GetDriveメソッド(ドライブの取得)

Excel VBA入門

公開日:2017年6月4日

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

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

FileSystemObject-GetDriveメソッド(ドライブの取得)【Excel VBA入門】
目次

1.基本形

FSO.GetDrive( DriveName ) →オブジェクト(Drive型)

変数説明
FSOFileSystemオブジェクト変数。FileSystemオブジェクトとして宣言して格納した変数です。
引数説明
DriveNameドライブ名を指定します(指定方法は後述参照)。

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

2.使用例

次の例では、Cドライブを取得し、ドライブ名をメッセージ表示します。

Sub ドライブの取得()

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

Set MyDrive = FSO.GetDrive("C")   '(3)

MsgBox MyDrive.DriveLetter   '(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 MyDrive As Drive
→ドライブを取得して格納する変数を使用するので、Drive型のオブジェクト変数MyDriveを宣言しています。

(3)Set MyDrive = FSO.GetDrive("C")
→FileSystemObjectオブジェクトのGetDriveメソッドを使用してドライブを取得しています。

まず、引数DriveNameに該当する「"C"」ですが、①「"C:"」のようにコロン(:)を付した記述や、②「"C:\"」のようにコロン(:)+パスの区切り文字(\)を付した記述でも構いません。

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

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

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

(4)MsgBox MyDrive.DriveLetter
→ドライブ名をメッセージ表示しています。

ドライブが存在すればドライブ名を表示しますが、ドライブが存在しなければエラーとなります(実行時エラー68)。

Excel VBA GetDrive

GetDriveメソッドを使用してドライブを取得しました。すると、Driveオブジェクトに属するプロパティやメソッドを使用することができます。DriveLetterプロパティはDriveオブジェクトのプロパティです。MyDrive.DriveLetterでドライブ名を取得することができます。

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

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

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

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

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

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

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