Group and Hide rows

Mcstefan

Board Regular
Joined
May 17, 2014
Messages
52
Office Version
  1. 365
Platform
  1. Windows
Hi,
I have the following data per image #1. The cell A1 is a data validation list with "aaa", "bbb" and "" values available. Once one of the value in cell A1 is selected then the fallowing macro executes.
For example if I select "aaa" in cell A1 then I get the result per image #3, meaning all rows containing "aaa" in the first column are collapses by group level 3 and all the rows containing "bbb" value are hidden.
However, the desired result should have been per image #2, meaning all rows containing "aaa" in the first column should have been collapsed by group level 2 level and all the rows containing "bbb" value are hidden.

Can anyone help me get a fix to the macro?

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:B1")) Is Nothing Then
Application.Run "HideRows"
End If
End Sub


Sub HideRows()
Dim strText As String
strText = Range("A1").Value
StartRow = 3
EndRow = 29
ColNum = 1

ActiveSheet.Outline.ShowLevels RowLevels:=2

For i = StartRow To EndRow
If Cells(i, ColNum).Value <> strText Then
Cells(i, ColNum).EntireRow.Hidden = True
Else
Cells(i, ColNum).EntireRow.Hidden = False
End If
Next i

strText = vbNullString
End Sub
 

Attachments

  • Group #1.png
    Group #1.png
    8.7 KB · Views: 11
  • Group #2.png
    Group #2.png
    7.2 KB · Views: 11
  • Group #3.png
    Group #3.png
    5.9 KB · Views: 11

Excel Facts

Using Function Arguments with nested formulas
If writing INDEX in Func. Arguments, type MATCH(. Use the mouse to click inside MATCH in the formula bar. Dialog switches to MATCH.
Try this:
VBA Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1:B1")) Is Nothing Then
        HideRows
    End If
End Sub

Sub HideRows()
    Dim strText As String
    strText = Range("A1").Value
    StartRow = 3
    EndRow = 29
    ColNum = 1
    
    ActiveSheet.Rows.Hidden = False
    ActiveSheet.Outline.ShowLevels RowLevels:=2
    
    For i = StartRow To EndRow
        If Cells(i, ColNum).Value <> vbNullString And Cells(i, ColNum).Value <> strText Then
            Cells(i, ColNum).EntireRow.Hidden = True
            i = i + 1
            Do While Cells(i, ColNum).EntireRow.OutlineLevel > 1
                Cells(i, ColNum).EntireRow.Hidden = True
                i = i + 1
            Loop
            Cells(i, ColNum).EntireRow.Hidden = True
        End If
    Next i
End Sub
 
Upvote 0
Solution

Forum statistics

Threads
1,224,827
Messages
6,181,194
Members
453,021
Latest member
pingpong7117

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top