dirコマンド結果のテキストファイルからフォルダサイズを抜き出す

フォルダのサイズを調べるときに、コマンドプロンプトからdirコマンドを実行してサイズを調べます。/Sオプションをつけると、サブディレクトリのフォルダに対しても表示してくれます。しかし、例えば、Cドライブ配下のすべてのフォルダのサイズを取得していろいろ操作したい場合(大きいサイズ順位並べ替えたり、過去との比較をとったり)はExcelにデータを抜き出したほうがやりやすいかもしれません。「dir /S <指定ディレクトリ>」の結果からフォルダのサイズを抜き出すプログラムを作成してみました。
今回抜き出す部分は以下です。

これを複数取り出します。取り出す方法としては、テキスト全体を読み込んで、正規表現でパターンに一致する行を取得します。パターンに一致する行から不要な文字列を削除してセルに出力します。マッチさせる行は3パターンあります。処理の流れは、最初に1パターン目(フォルダ名)がマッチした時点でA8セルに出力します。次に、2パターン目(フォルダサイズ)がマッチした時点でB8セルに出力します。この時出力セルの行のカウンタをアップします。そのため、次に1パターン目にマッチしたときはA9セルに出力することとなります。これを続けていきます。3パターン目(ファイルの総数)はテキストファイルの最後から3行目のところに出力されている文字列です。ここから下の2行に総バイト数と空き容量が表示されています。この情報は今回は取得しないので、見つけた時点で検索を終了します。以下が実行結果画面とプログラムです。

Option Explicit

'#########################################
'参照設定:Microsoft Scripting Runtime
'          Microsoft VBScript Regular Expressions 5.5
'#########################################

Public Sub GetFolderSizeFromText()

    '前の情報を消去
    Range(Cells(8, "A"), Cells(10000, "B")).Clear

    'ファイルパスを取得
    Dim fPath As String
    fPath = Cells(4, "A").Value
    If Dir(fPath) = "" Or fPath = "" Then
        MsgBox "ファイルが存在しまんせん。"
        Exit Sub
    End If
    
    'ファイルオープン
    Dim objFS As FileSystemObject
    Dim objTS As TextStream
    Set objFS = CreateObject("Scripting.FileSystemObject")  'FileSystemObject生成
    Set objTS = objFS.OpenTextFile(fPath, ForReading)  'TextStreamオブジェクト生成
    Set objFS = Nothing 'FileSystemObjectは解放しておく
    
    '全量Bufferに読み込み
    Dim Buffer As String
    Buffer = objTS.ReadAll
    
    'ファイルクローズ
    objTS.Close
    Set objTS = Nothing 'TextStreamオブジェクト解放
    
    '検索パターン設定
    Dim objRE As RegExp
    Set objRE = CreateObject("VBScript.RegExp")    'RegExpオブジェクト生成
    objRE.Pattern = "^ .* のディレクトリ$|^.* バイト$|ファイルの総数"  'パターンの設定
    objRE.Global = True 'マッチしたものすべて取得
    objRE.MultiLine = True  '行単位で検索
    
    
    '検索結果の行数分ループ
    Dim objM As Match
    Dim y As Integer
    y = 8
    '*************************************************************************
    '* objRE.Execute(Buffer)の戻り値はMatchオブジェクトのコレクションです。  *
    '* Matchオブジェクトは検索結果が格納されています。                       *
    '*************************************************************************
    For Each objM In objRE.Execute(Buffer)
        '「ファイルの総数」だったらループを抜ける
        If InStr(objM.Value, "ファイルの総数") Then
            Exit For

        '「のディレクトリ」が含まれる行の場合
        ElseIf InStr(objM.Value, "のディレクトリ") Then
            '不要文字を切り取りセルに出力
            If Cells(y, 1) = "" Then
                Cells(y, 1).Value = Trim(Replace(objM.Value, "のディレクトリ", ""))
            Else
                MsgBox "エラーが発生したので終了します。"
                Set objRE = Nothing
                Exit Sub
            End If
            
        '「 バイト」が含まれる行の場合
        Else
            '不要文字を切り取りセルに出力
            If Cells(y, 2) = "" Then
                Cells(y, 2).Value = Trim(Replace(Right(objM.Value, 24), "バイト", ""))
            Else
                MsgBox "エラーが発生したので終了します。"
                Set objRE = Nothing
                Exit Sub
            End If
            y = y + 1   '次の行へ
        End If
        
    Next
    
    Set objRE = Nothing    'RegExpオブジェクト解放
    
    MsgBox "完了しました。"

End Sub