【Excel VBA】FSOでドライブの空き容量や合計サイズを取得する方法

VBAで大容量のファイルを出力したり、バックアップを作成したりするマクロを組む際には、処理の実行前に「保存先のドライブに十分な空き容量があるか?」を事前にチェックできると、より安全で親切なプログラムになります。

FileSystemObject (FSO)の**Driveオブジェクトを使えば、PCに接続されている特定のドライブ(CドライブやDドライブなど)の、合計サイズや空き容量**といった情報を簡単に取得できます。

この記事では、その具体的な方法を解説します。


目次

【準備】参照設定

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


完成したVBAコード

以下は、Cドライブの合計サイズ、空き容量、使用済み容量を計算し、分かりやすいGB(ギガバイト)単位でメッセージボックスに表示するVBAコードです。

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

    ' 変数を宣言します
    Dim fso As New FileSystemObject
    Dim targetDrive As Drive
    Dim driveLetter As String
    
    Dim totalSpace As Currency
    Dim freeSpace As Currency
    Dim usedSpace As Currency
    
    '--- 調査対象のドライブ文字を設定 ---
    driveLetter = "C"

    ' ドライブが存在しない場合のエラーを回避
    If Not fso.DriveExists(driveLetter) Then
        MsgBox driveLetter & "ドライブが見つかりません。", vbCritical
        Exit Sub
    End If
    
    '--- 1. Driveオブジェクトを取得 ---
    Set targetDrive = fso.GetDrive(driveLetter)
    
    ' ドライブの準備ができていない場合(CDドライブにディスクがないなど)
    If Not targetDrive.IsReady Then
        MsgBox targetDrive.Path & " は準備ができていません。", vbExclamation
        Exit Sub
    End If

    '--- 2. 各プロパティで容量(バイト単位)を取得 ---
    totalSpace = targetDrive.TotalSize
    freeSpace = targetDrive.FreeSpace
    
    '--- 3. 使用済み容量を計算 ---
    usedSpace = totalSpace - freeSpace
              
    '--- 4. 結果をGB単位で表示 ---
    Dim message As String
    Const GIGABYTE As Currency = 1024 * 1024 * 1024 ' 1GBをバイトで定義
    
    message = "【" & UCase(driveLetter) & "ドライブの容量情報】" & vbCrLf & vbCrLf & _
              "合計サイズ: " & Format(totalSpace / GIGABYTE, "0.00") & " GB" & vbCrLf & _
              "使用済み: " & Format(usedSpace / GIGABYTE, "0.00") & " GB" & vbCrLf & _
              "空き容量: " & Format(freeSpace / GIGABYTE, "0.00") & " GB"
              
    MsgBox message, vbInformation, "ドライブ容量の取得"
    
    ' オブジェクトを解放
    Set targetDrive = Nothing
    Set fso = Nothing

End Sub

コードのポイント解説

fso.GetDrive("ドライブ文字")

GetDriveメソッドは、引数で指定したドライブレター("C""D"など)に対応するDriveオブジェクトを返します。このオブジェクトが、ドライブの様々な情報を持っています。

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

Driveオブジェクトには、容量に関する主要なプロパティが3つあります。

  • .TotalSize: ドライブの総容量をバイト単位で返します。
  • .FreeSpace: ドライブ全体の空き容量をバイト単位で返します。
  • .AvailableSpace: 現在のユーザーが利用可能な空き容量をバイト単位で返します。通常は.FreeSpaceと同じ値ですが、ディスククォータ(ユーザーごとの容量制限)が設定されている環境では、より少ない値を返すことがあります。一般的には.FreeSpaceを使えば問題ありません。

③ 単位の変換

各プロパティが返す値は、非常に大きな数値になるバイト単位です。人間にとって分かりやすいGB(ギガバイト)などの単位に変換するには、1024で割る計算を行います。

  • KB: バイト数 / 1024
  • MB: バイト数 / 1024 / 1024
  • GB: バイト数 / 1024 / 1024 / 1024

サンプルコードでは、大きな数値を扱う際に誤差が出にくいCurrency(通貨型)を計算用のデータ型として使用しています。


【応用】十分な空き容量があるかチェックする関数

このテクニックを応用すれば、「指定したサイズのファイルを保存するのに十分な空き容量があるか?」を判定する、実用的な自作関数も作れます。

Function HasEnoughSpace(driveLetter As String, requiredSizeMB As Double) As Boolean
    Dim fso As New FileSystemObject
    If fso.DriveExists(driveLetter) Then
        If fso.GetDrive(driveLetter).FreeSpace / 1024 / 1024 >= requiredSizeMB Then
            HasEnoughSpace = True
        End If
    End If
End Function

Sub CheckSpace()
    If HasEnoughSpace("C", 500) = True Then ' Cドライブに500MBの空きがあるか?
        MsgBox "十分な空き容量があります。"
    Else
        MsgBox "空き容量が不足しています。"
    End If
End Sub

まとめ

FSOを使えば、ドライブの容量情報を簡単に取得できます。

  • **fso.GetDrive("C")**で、調べたいドライブのDriveオブジェクトを取得する。
  • **.TotalSizeで合計サイズ、.FreeSpace**で空き容量を取得する。
  • 戻り値はバイト単位なので、1024で割ってGBなどに変換する。

大容量のファイルを扱うマクロでは、この方法で事前に空き容量をチェックする処理を組み込むことで、よりユーザーに親切で、安定したツールを作成することができます。

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

この記事を書いた人

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

目次