iPS-BBの会で「外付けハードディスクのセットアップする」を機に、5年前(たぶん)購入したバッファロー製 USB-HDD付属の Buffalo Backup Utitltyをインストールした。
バックアップすると、バックアップ先ドライブに “BUData” というフォルダが出来る。
これを追っていたが、手作業では時間が掛かるし面倒。第一、現時点では継続して使う予定もないのに、「何でこんなことをせねばならぬのか」と自問自答... そこで、「Excel-VBAの練習」と割り切って作ったぁ〜
使い方
- 開くと【解析する「BUData」下のフォルダを指定してください】ダイアログボックスが出るので、
- バックアップしているフォルダを選択し、
- バックアップドライブを開く。
- 「BUData」を開き、
- 今、バックアップを記録しているフォルダを選択し、
- 通常は「****_00000000」フォルダ
- 環境が変わると「****_00000001」… となるようだ。
- [OK]。
- ポインタが砂時計状態になり…
- 長い時は“応答なし”がでるが、放っておくと終了する。(たぶん)
- 毎回作り変えているので時間が掛かる。追加になったフォルダだけでよいはずだが...
- 「終了しました」が出たら、[OK]する。
- 直近のフォルダが選択状態になる。
我慢できる程度(開発との天秤)なので、個人で使う分にはいいが...
ヒント
- 初回のバックアップ先フォルダ(解析フォルダ)は、改廃履歴・シートの「セルB2」に保存される。
- 2回目以降は、ワークシート「BUData解析」を開くと、自動的に「処理状態」となり、終わる。
- 改廃履歴・シートの解析フォルダ(セルB2)を削除すると、「初回」と同じ動作となる。
BUData更新履歴・シート
-
- No: 単なる連番
- フォルダ名: 解析フォルダ下にあるフォルダ名
- 開始日 時分秒: 「フォルダ名」を日付型に変換した値。昇順に並べ替えてある。
- 条件付き書式は、変更可。
- サイズ(MB): 「フォルダ名」のサイズ(容量)。単位 MB に四捨五入。
- 累積(GB): 「サイズ(MB)」の累積値。単位 GB。
- セルF2 の数式 → =SUM($D$2:D2)/1024
- DataBaseComplete: ファイル DataBaseComplete の更新日時。(たぶん、バックアップの終了日時)
- 所要時間: 「DataBaseComplete」から「開始日 時分秒」を引いた値。
- セルG2 の数式 → =F2-C2
- セルの書式設定 → h"゚"mm"'"
- Chgサイズ(MB): Chg・フォルダーのサイズ(容量)
- Chgファイル数: Chg・フォルダーのファイル数
- Delサイズ(MB): Chg・フォルダーのサイズ(容量)
- Delファイル数: Chg・フォルダーのファイル数
ヒント
- ファイル数が、エクスプローラー/プロパティの値と差がある。
隠しファイルあるいはシステムファイルがある‥‥ と、思っている。
Excel-VBAの収穫
※ ファイルの最終更新日の取得
- Function getLastUpdate(argファイル名 As String) As Date
- Dim FSO As Object
- Set FSO = CreateObject("Scripting.FileSystemObject")
- getLastUpdate = FSO.GetFile(argファイル名).DateLastModified
- Set FSO = Nothing
- End Function
※ 直下のファイル数を返す(サブフォルダは含まれない)
- Function getFolderFilesCount(argパス As String) As Double
- Dim FSO As Object
- Set FSO = CreateObject("Scripting.FileSystemObject")
- getFolderFilesCount = FSO.GetFolder(argパス).Files.Count
- Set FSO = Nothing
- End Function
※ フォルダサイズを取得する
- Function getFolderSize(argフォルダ名 As String) As Double
- Dim FSO As Object
- Set FSO = CreateObject("Scripting.FileSystemObject")
- getFolderSize = FSO.GetFolder(argフォルダ名).Size
- Set FSO = Nothing
- End Function
※ サブフォルダを含む全てのファイル数を返す。
この関数を呼び出す前に、Declarations の AllFilesCounter をクリアする必要がある。
- Function getAllFilesCount(argパス As String)
- Dim FSO As Object
- Dim obj As Object
- Set FSO = CreateObject("Scripting.FileSystemObject")
- For Each obj In FSO.GetFolder(argパス).SubFolders
- VARAns = getAllFilesCount(obj.Path)
- ALLFilesCounter = ALLFilesCounter + getFolderFilesCount(obj.Path)
- Next obj
- getAllFilesCount = ALLFilesCounter
- Set FSO = Nothing
- End Function