指定したフォルダの容量を監視します。ネットワークドライブなどの共用の場合、無尽蔵に増えることがあり、定期的監視が必要となることもあります。
フォルダを右クリックして値を入力して、保存を自動で行えるようにしました。
Excelマクロを実行するファイルのシートに設定情報を追加します。ソースコードの中の「設定を読み込む」個所で使用します。
Excelマクロを実行するファイル
・監視フォルダは、監視対象のフォルダ名を指定します。
・出力ファイルは、Excelマクロを実行するファイルとは別けて作成する形をにしています。

出力ファイル (FolderInfo.xlsx) 実行する度に下に追加されていきます。

以下の関数を使用していますので、リンクから関数をコピーします。
・ファイルの有無を確認する IsFileExists()
・フォルダのプロパティ(サイズとファイルの数)を取得 GetFolderCount(), GetFolderSize()
・サブフォルダまで一括作成 CreateSubFolder()
・最終行取得(空白まで) GetBlankRow()
Option Explicit
Type FolderInfo
FilesCount As Long ' ファイルの件数
FolderCount As Long ' フォルダの件数
End Type
Sub GetFolderSize_Click()
Dim fd As FolderInfo
Dim target_folder As String
Dim output_file As String
Dim ws_this As Worksheet
Dim wb As Workbook
Dim ws As Worksheet
Dim sz As LongLong
Dim last_row As Long
On Error GoTo ErrProc
Set ws_this = ThisWorkbook.Sheets(1)
' 設定を読み込む
target_folder = ws_this.Range("B1")
output_file = ws_this.Range("B2")
' 指定したフォルダのファイルとフォルダの数を取得
GetFolderCount target_folder, fd
' 指定したフォルダのサイズを取得
sz = GetFolderSize(target_folder)
If IsFileExists(output_file) = True Then ' ファイルの有無を確認
Set wb = Workbooks.Open(output_file) ' ブックを開く
Else
' ファイルが無い場合、ブックを作成
Set wb = Workbooks.Add
End If
' 出力先はシートの1に
Set ws = wb.Sheets(1)
With ws
' 最終行の取得
last_row = GetBlankRow(ws)
If last_row = 0 Then
' 最終行が0の場合は、データが無いのでタイトルを付ける
.Range("A1") = "Date"
.Range("B1") = "Time"
.Range("C1") = "Size"
.Range("D1") = "Files Count"
.Range("E1") = "Folder Count"
last_row = 2
Else
last_row = last_row + 1
End If
' データを設定
.Range("A" & last_row) = Date
.Range("B" & last_row) = Time
.Range("C" & last_row) = sz
.Range("D" & last_row) = fd.FilesCount
.Range("E" & last_row) = fd.FolderCount
' スタイルを変更
.Columns("A:E").EntireColumn.AutoFit
.Columns("B:B").NumberFormatLocal = "[$-x-systime]h:mm:ss AM/PM"
.Columns("C:E").Style = "Comma [0]"
.Range("A1").Select ' A1を選択しておく
End With
If last_row = 2 Then
If CreateSubFolder(output_file, False) = True Then
' 2の場合は、新規保存
wb.SaveAs filename:=output_file
End If
Else
' 上書き保存
wb.Save
End If
' ブックを閉じる
wb.Close
Exit Sub
' エラー発生時の処理
ErrProc:
Debug.Print "エラー番号:" & Err.Number & ", エラーの種類:" & Err.Description
End Sub


コメント