단일 셀 값을 기반으로 행을 숨기거나 숨기기 해제하는 VBA 코드

단일 셀 값을 기반으로 행을 숨기거나 숨기기 해제하는 VBA 코드

내 코드가 작동하지 않는 이유를 잘 모르겠습니다. 기본적으로 셀 B5에는 "calc_1"과 "calc_2"라는 두 가지 옵션이 있으며 사용자가 드롭다운을 통해 선택할 수 있습니다.

calc_1을 선택한 경우 6~29행을 표시하고 30~53행을 숨기고, calc_2의 경우 그 반대의 경우를 원합니다. 아래는 제가 작성한 코드입니다:

Private Sub Worksheet_Change(ByVal Target As Range)

    If Range("B5").Value = "calc_1" Then
        Rows("6:29").EntireRow.Hidden = False
        Rows("30:53").EntireRow.Hidden = True
        

    ElseIf Range("B5").Value = "calc_2" Then
        Rows("6:29").EntireRow.Hidden = True
        Rows("30:53").EntireRow.Hidden = False

    End If

End Sub

이 코드를 실행하면 어떤 항목을 선택하더라도 6~29행만 표시됩니다. 내가 여기서 무엇을 놓치고 있는지 잘 모르겠습니다.

답변1

워크시트 변경 및 교차

  • 워크시트의 각 변경 사항에 대해 코드가 실행되었습니다. 셀에 변경이 발생한 경우에만 실행되도록 제한해야 합니다 B5...

    If not Intersect(Range("B5"), Target) Is Nothing Then
        ' do your stuff
    End If
    

    ... 또는 코드에서와 같이:

    If Intersect(Range("B5"), Target) Is Nothing Then Exit Sub
    
    ' do your stuff
    
  • 이 경우 주석에서 언급된 harrymc와 같이 EntireRow는 중복됩니다.

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    
    Dim iCell As Range: Set iCell = Intersect(Range("B5"), Target)
    If iCell Is Nothing Then Exit Sub
    
    If iCell.Value = "calc_1" Then
        Rows("6:29").Hidden = False
        Rows("30:53").Hidden = True
    ElseIf iCell.Value = "calc_2" Then
        Rows("6:29").Hidden = True
        Rows("30:53").Hidden = False
    'Else ' do nothing
    End If

End Sub

Select Case선택적으로 대신 사용할 수 있습니다 If ElseIf.

Select Case iCell.Value
Case "calc_1"
    Rows("6:29").Hidden = False
    Rows("30:53").Hidden = True
Case "calc_2"
    Rows("6:29").Hidden = True
    Rows("30:53").Hidden = False
'Case Else ' do nothing
End Select

관련 정보