こんにちは、Ryoです。
VBAでも指定したドライブの総容量や空き容量を取得することが可能なので、使用容量を算出することも出来ます。用途としてはドライブ管理を目的として適宜情報を取得し一定容量以下であればアラートを出すなどが可能ではないかと思いますので、今回はその方法について書いていきます。
1.サンプル概要
サンプルとして以下画像に示すワークシートに「Cドライブ」とフラッシュメモリ「Eドライブ」の総容量、空き容量、使用容量を簡潔に書いた表があるとします。
この表にサンプルコードを実行することで次のように容量を取得し表示することが出来ます。
私が普段使うノートPCなので容量は少ないのですが、このように取得し表示することが可能なので、状況をモニタリングすることも出来るかと思います。
2.サンプルコード
Sub Sample1() Dim FSO As Object Dim C_Total, C_Free, E_Total, E_Free As Long Set FSO = CreateObject("Scripting.FileSystemObject") 'FileSystemObjectオブジェクトを作成し変数FSOに代入する With FSO.GetDrive("C") 'CドライブをDriveオブジェクトとして取得し処理実行 C_Total = Format(.TotalSize / 1024 / 1024 / 1024, "#,###") '総容量をGB単位に換算し、対象セルへ書き込む Cells(4, 3) = C_Total & "GB" C_Free = Format(.FreeSpace / 1024 / 1024 / 1024, "#,###") '空き容量をGB単位に換算、使用容量を算出して対象セルに書き込む Cells(5, 3) = C_Free & "GB" Cells(6, 3) = C_Total - C_Free & "GB" End With With FSO.GetDrive("E") 'EドライブをDriveオブジェクトとして取得し処理実行 E_Total = Format(.TotalSize / 1024 / 1024 / 1024, "#,###") '総容量をGB単位に換算し、対象セルへ書き込む Cells(9, 3) = E_Total & "GB" E_Free = Format(.FreeSpace / 1024 / 1024 / 1024, "#,###") '空き容量をGB単位に換算、使用容量を算出して対象セルに書き込む Cells(10, 3) = E_Free & "GB" Cells(11, 3) = E_Total - E_Free & "GB" End With 'セル書込み後の体裁用に文字位置を右詰め指定 Range(Cells(4, 3), Cells(6, 3)).HorizontalAlignment = xlRight Range(Cells(9, 3), Cells(11, 3)).HorizontalAlignment = xlRight End Sub
先ず指定したドライブの総容量を取得するにはTotalSizeプロパティを使用します。
オブジェクト.TotalSize
このような形になりますが、オブジェクトにはFileSystemObjectのDrivesオブジェクトを指定しますので、DrivesオブジェクトはGetDriveメソッドを使って取得します。
Set FSO = CreateObject(“Scripting.FileSystemObject”)
ここでFileSystemObjectを作成、変数に代入しています。
With FSO.GetDrive(“C”)
次にCドライブをDriveオブジェクトとして取得し、その後の処理を実行します。
C_Total = Format(.TotalSize / 1024 / 1024 / 1024, “#,###”)
ここでは.TotalSizeで総容量を取得しますが、バイト単位となっている為1024で除算を繰り返すことによりGB単位に換算しています。
Formatを使っているのは、容量が大きい場合の表示体裁を考えてのことですが、サンプルでは私のノートPC容量が少ないので機能してないのが悲しいところです(笑)
C_Free = Format(.FreeSpace / 1024 / 1024 / 1024, “#,###”)
オブジェクト.FreeSpace
空き容量についても.FreeSpaceで取得した以降は処理として同様になります。
後は総容量から空き容量を減算することで使用容量を求め、指定セルに書き込んでいます。
フラッシュメモリのEドライブについては、 With FSO.GetDrive(“E”)とEドライブを指定し、他はCドライブ処理と同様になります。
2ドライブの容量取得が終われば、後はセル表示の体裁として範囲指定の文字位置右詰めを行っていますが、ここは無くても特に問題はありません。
3.まとめ
VBAで処理する際に日々データ集計して複数ファイル保存を行っていくような場合は、容量の監視を求められることもあるかもしれませんので、そんな時に使えるかと思います。
それほど使用頻度が高くないとは思いますが、このように容量を取得することも出来るということを知っておくと幅が広がりますので、何か機会があればご検討してみてくださいませ。
以上、ドライブの容量を取得する(総容量/空き容量)方法についてでした!
今回の記事が何かの参考になれば幸いです。
Ryo