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

What did Pito Salas invent?
Pito Salas, working for Lotus, popularized what would become to be pivot tables. It was released as Lotus Improv in 1989.
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,223,905
Messages
6,175,297
Members
452,633
Latest member
DougMo

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