ある文字列を含むセルを行単位でグループ化して非表示にしたい
本日職場で、こんなリクエストを見た。
※公開可能なように、内容は一般化しています。
みんな大好き「なんちゃって個人情報」に於いて、
- 性別が「男」の行を全て非表示にしたい。
- 単純に非表示にすると存在に気づけないので、
グループにしたうえで畳んでおきたい。
面白そうなので、やってみた。
まず、「男」だけを探すために、以前作成した「FindAll」を引っ張り出してきた。
infoment.hatenablog.com
作戦としては、こんな感じだ。
- 「性別」列の「男」だけを検索し、変数に格納。
- 飛び石状態の「男」の塊毎に、行をグループ化。
- 最後に、折り畳み。
作ってみると、意外とシンプルになった。こんな感じだ。
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
確認した結果がこちら。
実は今日まで、「グループ」を使ったことが無かった。
なので今回は、勉強になりました。
参考まで。