ある文字列を含むセルを行単位でグループ化して非表示にしたい

本日職場で、こんなリクエストを見た。
※公開可能なように、内容は一般化しています。

みんな大好き「なんちゃって個人情報」に於いて、

  1. 性別が「男」の行を全て非表示にしたい。
  2. 単純に非表示にすると存在に気づけないので、
    グループにしたうえで畳んでおきたい。

面白そうなので、やってみた。
まず、「男」だけを探すために、以前作成した「FindAll」を引っ張り出してきた。
infoment.hatenablog.com

作戦としては、こんな感じだ。

  1. 「性別」列の「男」だけを検索し、変数に格納。
  2. 飛び石状態の「男」の塊毎に、行をグループ化。
  3. 最後に、折り畳み。

作ってみると、意外とシンプルになった。こんな感じだ。

Sub Sample()
    ' テーブル書式設定されたなんちゃって個人情報を変数にセット。
    Dim Tb As ListObject
    Set Tb = ActiveSheet.ListObjects(1)
    
    ' テーブルの「性別」列から「男」を検索して、TargetRangeにセット。
    Dim TargetRange As Range
    Set TargetRange = FindAll(Tb.ListColumns("性別").DataBodyRange, "男")
    
    ' TargetRange内の男衆を、片っ端からグループ化。
    Dim Area As Range
        For Each Area In TargetRange.Areas
            Area.Rows.Group
        Next
    
    ' 折り畳み。
        ActiveSheet.Outline.ShowLevels RowLevels:=1
End Sub

確認した結果がこちら。

実は今日まで、「グループ」を使ったことが無かった。

なので今回は、勉強になりました。

参考まで。