【Excel VBA】FSOでPCに接続されている全ドライブの一覧を取得する方法

VBAでファイル操作を行う際、ユーザーにバックアップ先のドライブを選択させたり、PCのストレージ構成を調査したりするために、現在利用可能なドライブの一覧を取得したい場合があります。

FileSystemObject (FSO)の**Drivesコレクション**を使えば、ローカルのハードディスク(C:など)から、USBメモリ、ネットワークドライブに至るまで、PCが認識している全てのドライブの情報を簡単に取得できます。

この記事では、FSO.Drivesをループ処理して、ドライブの一覧をExcelシートに書き出す方法を解説します。


目次

【準備】参照設定

FSOを快適に利用するため、VBAエディタでツール > 参照設定を開き、**「Microsoft Scripting Runtime」**にチェックを入れておくことを推奨します。


完成したVBAコード

以下が、PCに接続されている全てのドライブの「ドライブレター」と「ドライブの種類」を、アクティブシートのA列とB列に書き出すVBAコードです。

'参照設定: Microsoft Scripting Runtime
Sub ListAllDrives()

    ' 変数を宣言します
    Dim fso As New FileSystemObject
    Dim drv As Drive
    Dim driveTypeNames As Variant
    Dim rowIndex As Long
    
    ' DriveTypeの数値に対応する日本語名を配列に格納
    driveTypeNames = Array("不明", "リムーバブルディスク", "ハードディスク", "ネットワークドライブ", "CD-ROM", "RAMディスク")
    
    ' 書き出し先のシートを準備
    ActiveSheet.Cells.ClearContents
    ActiveSheet.Range("A1:B1").Value = Array("ドライブレター", "種類")
    rowIndex = 2

    '--- 1. FSO.Drivesコレクションをループ処理 ---
    For Each drv In fso.Drives
        '--- 2. 各ドライブの情報をシートに書き出す ---
        ' .DriveLetterプロパティでドライブ名を取得
        ActiveSheet.Cells(rowIndex, "A").Value = drv.DriveLetter & ":"
        ' .DriveTypeプロパティで種類(数値)を取得し、配列から対応する名前を取り出す
        ActiveSheet.Cells(rowIndex, "B").Value = driveTypeNames(drv.DriveType)
        
        rowIndex = rowIndex + 1
    Next drv
    
    ActiveSheet.Columns("A:B").AutoFit
    
    ' オブジェクトを解放
    Set drv = Nothing
    Set fso = Nothing

End Sub

コードのポイント解説

FSO.Drives コレクション

For Each drv In fso.Drives

FSOオブジェクトの.Drivesプロパティは、PCが認識している全てのドライブの集まり(コレクション)を返します。For Eachループでこのコレクションを巡回させることで、各ドライブをDriveオブジェクトとして一つずつ変数(drv)に取り出し、処理を行うことができます。

Drive オブジェクトのプロパティ

ループの中で、変数drvは個々のドライブを表すDriveオブジェクトを格納しています。このオブジェクトは、ドライブに関する様々な情報を持つプロパティを持っています。

  • .DriveLetter: ドライブレター(例: “C”)を返します。
  • .DriveType: ドライブの種類を、以下のような数値で返します。
.DriveTypeが返す値driveTypeNames配列の要素意味
0driveTypeNames(0)不明 (Unknown)
1driveTypeNames(1)リムーバブルディスク (Removable)
2driveTypeNames(2)ハードディスク (Fixed)
3driveTypeNames(3)ネットワークドライブ (Network)
4driveTypeNames(4)CD-ROM
5driveTypeNames(5)RAM ディスク (RAMDisk)

③ ドライブの種類のマッピング

driveTypeNames = Array("不明", "リムーバブルディスク", ...)
...
ActiveSheet.Cells(rowIndex, "B").Value = driveTypeNames(drv.DriveType)

.DriveTypeプロパティが返すのは味気ない数値なので、ユーザーにとって分かりやすい表示にするために、あらかじめ数値の順番に対応した日本語名の配列(driveTypeNames)を用意しています。

そして、drv.DriveTypeで取得した数値を、この配列のインデックスとして使うことで、driveTypeNames(2)"ハードディスク" のように、数値を分かりやすい文字列に変換しています。


【応用】さらに詳細なドライブ情報を取得する

Driveオブジェクトには、他にも便利なプロパティがあります。これらを使えば、より詳細なドライブ情報の一覧を作成できます。

プロパティ説明
.IsReadyドライブが利用可能か (True/False)
.VolumeNameボリューム名(例: “ローカル ディスク”)
.TotalSizeドライブの総容量(バイト)
.FreeSpaceドライブの空き容量(バイト)
.FileSystemファイルシステムの種類(例: “NTFS”)

まとめ

FSOのDrivesコレクションとDriveオブジェクトを使えば、VBAからPCのドライブ構成を簡単に把握できます。

  1. **For Each drv In fso.Drives**で、全てのドライブをループ処理する。
  2. ループの中で、**drv.DriveLetterdrv.DriveType**といったプロパティから情報を取得する。
  3. (推奨).DriveTypeが返す数値を、配列を使って分かりやすい文字列に変換する。

このテクニックは、ファイル操作を伴うマクロで、ユーザーに保存先ドライブを選択させたり、空き容量をチェックしたりといった、より高度な機能を追加する際に役立ちます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次