Buffalo BackupUtilityの状況がわかる表をExcel-VBAで作ってみた

 iPS-BBの会で「外付けハードディスクのセットアップする」を機に、5年前(たぶん)購入したバッファロー製 USB-HDD付属の Buffalo Backup Utitltyをインストールした
 バックアップすると、バックアップ先ドライブに “BUData” というフォルダが出来る。
これを追っていたが、手作業では時間が掛かるし面倒。第一、現時点では継続して使う予定もないのに、「何でこんなことをせねばならぬのか」と自問自答... そこで、「Excel-VBAの練習」と割り切って作ったぁ〜

ファイル名

  • BUData解析 ‥‥ Microsoft Excel マクロ有効ワークシート (.xlsm)

使い方

  1. 開くと【解析する「BUData」下のフォルダを指定してください】ダイアログボックスが出るので、
  2. バックアップしているフォルダを選択し、
    1. バックアップドライブを開く。
    2. 「BUData」を開き、
    3. 今、バックアップを記録しているフォルダを選択し、
      • 通常は「****_00000000」フォルダ
      • 環境が変わると「****_00000001」… となるようだ。
  3. [OK]。
  4. ポインタが砂時計状態になり…
    • 長い時は“応答なし”がでるが、放っておくと終了する。(たぶん)
    • 毎回作り変えているので時間が掛かる。追加になったフォルダだけでよいはずだが...
  5. 「終了しました」が出たら、[OK]する。
  6. 直近のフォルダが選択状態になる。


 我慢できる程度(開発との天秤)なので、個人で使う分にはいいが...

ヒント
  1. 初回のバックアップ先フォルダ(解析フォルダ)は、改廃履歴・シートの「セルB2」に保存される。
  2. 2回目以降は、ワークシート「BUData解析」を開くと、自動的に「処理状態」となり、終わる。
  3. 改廃履歴・シートの解析フォルダ(セルB2)を削除すると、「初回」と同じ動作となる。

BUData更新履歴・シート

    1. No: 単なる連番
    2. フォルダ名: 解析フォルダ下にあるフォルダ名
    3. 開始日 時分秒: 「フォルダ名」を日付型に変換した値。昇順に並べ替えてある。
      • 条件付き書式は、変更可。
    4. サイズ(MB): 「フォルダ名」のサイズ(容量)。単位 MB に四捨五入。
    5. 累積(GB): 「サイズ(MB)」の累積値。単位 GB。
      • セルF2 の数式 → =SUM($D$2:D2)/1024
    6. DataBaseComplete: ファイル DataBaseComplete の更新日時。(たぶん、バックアップの終了日時)
    7. 所要時間: 「DataBaseComplete」から「開始日 時分秒」を引いた値。
      • セルG2 の数式 → =F2-C2
      • セルの書式設定 → h"゚"mm"'"
    8. Chgサイズ(MB): Chg・フォルダーのサイズ(容量)
    9. Chgファイル数: Chg・フォルダーのファイル数
    10. Delサイズ(MB): Chg・フォルダーのサイズ(容量)
    11. Delファイル数: Chg・フォルダーのファイル数
ヒント
  • ファイル数が、エクスプローラー/プロパティの値と差がある。
     隠しファイルあるいはシステムファイルがある‥‥ と、思っている。

Excel-VBAの収穫

※ ファイルの最終更新日の取得
  1. Function getLastUpdate(argファイル名 As String) As Date
  2. Dim FSO As Object
  3.  
  4. Set FSO = CreateObject("Scripting.FileSystemObject")
  5. getLastUpdate = FSO.GetFile(argファイル名).DateLastModified
  6. Set FSO = Nothing
  7.  
  8. End Function
※ 直下のファイル数を返す(サブフォルダは含まれない)
  1. Function getFolderFilesCount(argパス As String) As Double
  2. Dim FSO As Object
  3.  
  4. Set FSO = CreateObject("Scripting.FileSystemObject")
  5. getFolderFilesCount = FSO.GetFolder(argパス).Files.Count
  6. Set FSO = Nothing
  7.  
  8. End Function
※ フォルダサイズを取得する
  1. Function getFolderSize(argフォルダ名 As String) As Double
  2. Dim FSO As Object
  3.  
  4. Set FSO = CreateObject("Scripting.FileSystemObject")
  5. getFolderSize = FSO.GetFolder(argフォルダ名).Size
  6. Set FSO = Nothing
  7.  
  8. End Function
※ サブフォルダを含む全てのファイル数を返す。

 この関数を呼び出す前に、Declarations の AllFilesCounter をクリアする必要がある。

  1. Function getAllFilesCount(argパス As String)
  2. Dim FSO As Object
  3. Dim obj As Object
  4.  
  5. Set FSO = CreateObject("Scripting.FileSystemObject")
  6. For Each obj In FSO.GetFolder(argパス).SubFolders
  7. VARAns = getAllFilesCount(obj.Path)
  8. ALLFilesCounter = ALLFilesCounter + getFolderFilesCount(obj.Path)
  9. Next obj
  10. getAllFilesCount = ALLFilesCounter
  11. Set FSO = Nothing
  12.  
  13. End Function