読者です 読者をやめる 読者になる 読者になる

こけめも

メモみたいなもの

StructureT-Makerで出力したフォルダリストを階層毎にグループ化するVBAマクロ

大きなプロジェクトのソースファイルを見ようとすると、大変な思いをすることがあります。
そんな時は窓の杜 - 【今日のお気に入り】フォルダをツリー構造ごと一覧表示「StructureT-Maker」などのアプリでざっとフォルダ構造を見させていただいています。


ただし、フォルダ構造次第では何万行となってしまうわけで…
というわけで、階層毎にグループ化するVBAマクロを書いてみました。

'StructureT-Makerで出力したフォルダリストを階層毎にグループ化する
Sub フォルダツリーグループ化()

    '最終セル取得
    Dim 最終行 As Long         '最終行
    Dim 最終列 As Integer      '最終列
    
    最終行 = ActiveSheet.UsedRange.Rows.Count
    最終列 = ActiveSheet.UsedRange.Columns.Count

    Dim 調査セル As Object
    Dim グループ化開始行 As Long
    Dim グループ化終了行 As Long
    
    グループ化開始行 = 0
    グループ化終了行 = 0
    
    '2列目から縦方向に検索し、空白以外のセルを見つける
    For i = 2 To 最終列
        For j = 1 To 最終行
            Set 調査セル = Cells(j, i)
            If 調査セル <> "" Then
                '空白→空白以外セルの境界行を保持する
                If グループ化開始行 = 0 Then
                    グループ化開始行 = 調査セル.Row
                    グループ化終了行 = 0
                End If
            Else
                '空白以外→空白セルの境界行を保持する
                If グループ化開始行 <> 0 Then
                    If グループ化終了行 = 0 Then
                        グループ化終了行 = 調査セル.Row - 1
                        'グループ化する
                        Range(Cells(グループ化開始行, 1), Cells(グループ化終了行, 1)).Rows.Group
                        グループ化開始行 = 0
                    End If
                End If
            End If
        Next
        グループ化開始行 = 0
    Next
End Sub

一応意図した通りに動いてくれているようです。
明日にでも当初のソースで実験してみよう。

追記

Excellの行のグループ化は8階層が限界かも知れません。
それ以上グループ化しようとすると、VBAがエラー吐きます…