Here's what I did with your sample. It's only starting point. You may want to modify as needed.
Set up:
1: Data validation source range: S2:S5 (S5 for blank)
2: Added empty row after each grouping (needed to break each groups)
3: Formula in T2:T4 to find empty rows in column (each break).
In T2. Confirmed as array (CTRL + SHIFT + ENTER). Copied down.
4: In D3 (beside validation cell) following formula
5: In standard module following code. Rows(#).ShowDetail is used to control individual group.
6: In Worksheet module (for sheet1 in this case) Me = Activesheet, RowLevels:=2 will expand all, :=1 will collapse all.
See attached sample.
Bookmarks