Excel VBA:ドライブの空き容量の取得|GetDiskFreeSpaceEx

Windows APIの「GetDiskFreeSpaceEx」を使用し、ドライブの空き容量の取得を取得するExcel VBAです。




Homeに戻る > Excel ファイル操作のTipsへ

ファイル保存の前にこのVBAを使用し空き容量をチェックしておくと、不用のエラーから回避することができます。

ドライブの空き容量の取得を取得するには、Windows APIのGetDiskFreeSpaceEx関数を使用します。

GetDiskFreeSpace関数もありますが、これは2GB以上の大容量では不正確です。

GetDiskFreeSpaceExの構文

Declare Function GetDiskFreeSpaceEx Lib "kernel32" Alias "GetDiskFreeSpaceExA" (ByVal lpDirectoryName As String, lpFreeBytesAvailableToCaller As Currency, lpTotalNumberOfBytes As Currency, lpTotalNumberOfFreeBytes As Currency) As Long

戻り値:関数が成功すると0以外の値が返り、関数が失敗すると0が返ります。

  • lpDirectoryName:最後尾に"\"をつけドライブ名を指定します。
  • lpFreeBytesAvailableToCaller:使用出来るドライブの空き容量が入ります。
  • lpTotalNumberOfBytes:ドライブの総容量が入ります。
  • lpTotalNumberOfFreeBytes:空き容量が入ります。ユーザー毎に割当てがある場合、lpTotalNumberOfFreeBytesとは異なる値になります。

VBAの場合、容量は10000倍し通貨型に格納します。

関連する「ドライブ・フォルダ・ファイルの更新日時を取得」を掲載していますので参照してください。



ドライブの空き容量の取得を取得するVBAコード


ExcelシートとVBA入力画面

シートにコマンドボタンを配置します。
コマンドボタンを配置したシート

GetDiskFreeSpaceExの宣言文、ExGetDiskFreeSpaceプロシージャ、CommandButton1のクリックイベントを入力します。
VBA入力画面

VBAコードの解説

  • Windows APIのGetDiskFreeSpaceExを宣言します。
ExGetDiskFreeSpaceプロシージャ
  1. 引数は取得するドライブ名、通貨型の容量を格納する3つの変数です。
  2. GetDiskFreeSpaceExを実行します。
  3. 通貨型の変数に、取得した容量を10000倍し格納します。
CommandButton1のクリックイベント
  1. ドライブ名を格納する変数、通貨型の容量を格納する3つの変数を宣言します。
  2. ドライブ名を格納する変数に、取得するドライブ名をセットします。
  3. 引数をセットし、ExGetDiskFreeSpaceプロシージャを呼び出します。
  4. Format関数で書式を設定し、取得した容量をB5セルに表示します。

ExcelシートのVBAコード

Option Explicit

'空き容量を取得するWindowsAPI
Private Declare Function GetDiskFreeSpaceEx Lib "kernel32" _
    Alias "GetDiskFreeSpaceExA" (ByVal lpDirectoryName As String, _
    lpFreeBytesAvailableToCaller As Currency, _
    lpTotalNumberOfBytes As Currency, _
    lpTotalNumberOfFreeBytes As Currency) As Long

'空き容量を取得を実行
Public Sub ExGetDiskFreeSpace(Drive As String, freeBytesAvailable As Currency, _
    totalNumberOfBytes As Currency, totalNumberOfFreeBytes As Currency)

    GetDiskFreeSpaceEx Drive, freeBytesAvailable, totalNumberOfBytes, totalNumberOfFreeBytes
    '通貨型を10000倍すると取得する数値となる
    freeBytesAvailable = freeBytesAvailable * 10000
    totalNumberOfBytes = totalNumberOfBytes * 10000
    totalNumberOfFreeBytes = totalNumberOfFreeBytes * 10000
End Sub

Private Sub CommandButton1_Click()
    '調べるフォルダ名
    Dim sDir As String
    'ユーザーが利用可能な空き容量
    Dim freeBytesAvailable As Currency
    'ディスク総容量
    Dim totalNumberOfBytes As Currency
    'ディスクの空き容量
    Dim totalNumberOfFreeBytes As Currency
    
    sDir = "c:\"
    ExGetDiskFreeSpace sDir, freeBytesAvailable, totalNumberOfBytes, totalNumberOfFreeBytes

    '結果表示
    Range("B5") = "ドライブ:" & sDir & vbCrLf & _
        "利用可能な空容量: " & Format$(Format$(freeBytesAvailable, "#,##0"), "@@@@@@@@@@@@@@@ Byte") & vbCrLf & _
        "総容量: " & Format$(Format$(totalNumberOfBytes, "#,##0"), "@@@@@@@@@@@@@@@ Byte") & vbCrLf & _
        "空容量: " & Format$(Format$(totalNumberOfFreeBytes, "#,##0"), "@@@@@@@@@@@@@@@ Byte")
End Sub


実行結果 Excel画面

ユーザー毎の割当てがない(1名で使用)ので、利用可能な空容量と空容量は同じ値になります。
実行結果 Excel画面


Excel Tipsメニューへ

■■■
このサイトの内容を利用して発生した、いかなる問題にも一切責任は負いませんのでご了承下さい
■■■
当ホームページに掲載されているあらゆる内容の無許可転載・転用を禁止します


Copyright (c) Excel-Excel ! All rights reserved