2

I have some information in rows 9 to 38. I need to hide these rows based on a cell value, for example A8:

  • If A8=3 then only show rows 9 to 11 out of 38

  • if A8=9 then only show rows 9 to 18 out of 38

  • If A8=0 then hide all rows from 9 to 38.

... and so on, only for rows 9 to 38.

This is my code so far:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim var As Variant

    'Determine if change was made to cell A8
    If Not Intersect(Target, Range("A8")) Is Nothing Then

        'Get value
        var = Range("A8").Value
        var = var + 9
        Debug.Print var

        'Hide all rows
        Rows("9:38").EntireRow.Hidden = True

        For i = 9 To var
        'Show Rows
        Rows("9:i").EntireRow.Hidden = False
        Debug.Print i
        Next i

    End If

End Sub
Atzmon
  • 3,341
  • 1
  • 19
  • 23

1 Answers1

0

A loop is not needed:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim var As Long

    If Not Intersect(Target, Range("A8")) Is Nothing Then

        var = Range("A8").Value + 8

        Rows("9:38").EntireRow.Hidden = True
        If var > 8 Then
            Rows("9:" & var).EntireRow.Hidden = False
        End If
    End If

End Sub

EDIT#1:

For 2 blocks:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim var As Long
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    If Not Intersect(Target, Range("A8")) Is Nothing Then

        var = Range("A8").Value + 8

        Rows("9:38").EntireRow.Hidden = True
        If var > 8 Then
            Rows("9:" & var).EntireRow.Hidden = False
        End If
    End If
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    If Not Intersect(Target, Range("A39")) Is Nothing Then

        var = Range("A39").Value + 39

        Rows("40:69").EntireRow.Hidden = True
        If var > 39 Then
            Rows("40:" & var).EntireRow.Hidden = False
        End If
    End If
End Sub