ファイル操作

【VBA】ドライブ情報(容量、種類、ネットワーク共有名等)を取得する方法/GetDriveメソッドとDriveオブジェクト

更新日:2024/01/18

VBAを使用するとコンピュータに接続されているドライブの空き容量や、FATやNTFSなどのファイルシステムの種類などのドライブ情報を取得できます。
ここでは、ドライブ情報を取得する方法をお伝えします。

 

ドライブ情報の取得

ドライブ情報はGetDriveメソッドで取得できます。
GetDriveメソッドは外部ライブラリのWindows Script Runtimeに含まれているFileSystemObjectオブジェクトのメンバーです。

または、FileSystemObjectオブジェクトのDrivesプロパティでもドライブ情報を取得できます。

GetDriveメソッドまたはDrivesプロパティを使用するには、まずはFileSystemObjectオブジェクトを取得する必要があります。

FileSystemObjectオブジェクトの取得方法は二つあります。
一つは、文字列"Scripting.FileSystemObject"をCreateObject関数に渡す方法です。

Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")

もう一つはVBエディタのメニュー:ツールから参照設定画面を開いて『Microsoft Scriptiong Runtime』を参照設定してから次のコードを実行する方法です。

Dim fso As New Scripting.FileSystemObject

参照設定をおこなうと、コード入力時にメソッド名候補が表示されます。
入力ミスを防げるので便利です。

 

GetDriveメソッド

GetDriveはドライブ名または共有名を指定してドライブ情報を取得するメソッドです。

FileSystemObjectオブジェクト.GetDrive( DriveSpec )

DriveSpecは、"C"、"C:"などのドライブ名、"\\pcname\sharename"等の共有名を指定します。
戻り値はDriveオブジェクトです。

Sub getDriveSample()
    Dim fso As New Scripting.FileSystemObject
    Dim driveInfo As drive
    
    Set driveInfo = fso.GetDrive("C")
    
    With driveInfo
        Debug.Print "容量: " & .TotalSize & "バイト"
        Debug.Print "空き容量: " & .FreeSpace & "バイト"
        Debug.Print "システム種別: " & .FileSystem
    End With
End Sub

実行すると、ドライブの情報がイミディエイトウィンドウに表示されます。

容量: 524082098176バイト
空き容量: 48267239424バイト
システム種別: NTFS

※結果は環境によって異なります。

 

Drivesプロパティ

FileSystemObjectオブジェクトのDrivesプロパティは、コンピューターに接続されているドライブのDriveオブジェクトを格納するコレクションです。
For Eachで順番に取り出すか、"c"または"c:"等のドライブ名をキーとしてDriveオブジェクトを取り出します。

Sub drivesSample()

    Dim fso As New Scripting.FileSystemObject
    Dim drv As drive
    
    Dim driveType() As Variant
    driveType = Array("不明", "リムーバブルデバイス", "固定ディスク", _
            "ネットワークドライブ", "光ディスクデバイス", "RAMディスク")
    
    For Each drv In fso.Drives
        With drv
            Debug.Print "ドライブ名: " & .DriveLetter
            Debug.Print "タイプ: " & driveType(.driveType)

            If .IsReady Then
                Debug.Print "システム種別: " & .FileSystem
                Debug.Print "容量: " & .TotalSize & "バイト"
                Debug.Print "空き容量: " & .FreeSpace & "バイト"
            Else
                Debug.Print "準備ができていません"
            End If
            Debug.Print vbCrLf
        End With
    Next drv

End Sub

実行すると、次のような情報がイミディエイトウィンドウに表示されます。

ドライブ名: C
タイプ: 固定ディスク
システム種別: NTFS
容量: 524082098176バイト
空き容量: 48212729856バイト

ドライブ名: D
タイプ: 固定ディスク
システム種別: NTFS
容量: 1000203087872バイト
空き容量: 925569429504バイト

ドライブ名: E
タイプ: 光ディスクデバイス
準備ができていません

※結果は環境によって異なります。

 

Driveオブジェクト

Driveオブジェクトはコンピューターに接続されているドライブの情報を格納するオブジェクトです。
FileSystemObjectオブジェクトのGetDriveメソッドで取得できます。

プロパティ

Driveオブジェクトは次のプロパティを持っています。

プロパティ名データ型内容
AvailableSpaceVariant型使用可能なサイズ12345678901
DriveLetterString型ドライブ文字"C"
DriveTypeDriveTypeConstドライブの種類Fixed
FileSystemString型ファイルシステムの種類"NTFS"
FreeSpaceVariant型空き容量
基本的にはAvailableSpaceと同じ
12345678901
IsReadyBoolean型準備できているかどうかTrue
PathString型ドライブのパス名"C:"
RootFolderFolderオブジェクトルートフォルダー---
SerialNumberLong型一意のシリアル値1234567890
ShareNameString型ネットワーク共有名""
TotalSizeVariant型トータルサイズ543219876543
VolumeNameString型ボリューム名
※値設定可能
"Windows"

DriveTypeプロパティは、次のDriveTypeConstのどれか一つの値をとります。

■DriveTypeConst
定数内容
CDRom4光ディスクデバイス
Fixed2固定ディスク
RamDisk5RAMディスク
Remote3ネットワークドライブ
Removable1リムーバブルデバイス
UnknownType0不明

VolumeNameは値の設定ができます。

Dim driveObj as Drive
Set driveObj = fs.GetDrive( "d" )
driveObj.VolumeName = "new volume name"

メソッド

Driveオブジェクトのメソッドはありません。

更新日:2024/01/18

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。