Excel VBA에서 여러 행 숨기기

Excel VBA에서 여러 행 숨기기

A열에 "xx" 값이 포함된 모든 행을 숨기고 A열에 "a"가 포함된 행은 숨기지 않으려고 합니다. 범위는 A8:A556입니다. 이 매크로는 C4 셀의 변경으로 인해 트리거되어야 합니다.

왜 작동하지 않는지 아시나요? 현재 시도는 다음과 같습니다.

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address(True, True) = "$C$4" Then

    If Range("A8:A555").Value = "xx" Then
        Rows("8:555").EntireRow.Hidden = True
    ElseIf Range("A8:A555").Value = "a" Then
        Rows("8:555").EntireRow.Hidden = False

     End If
   End If

End Sub

감사해요!

편집하다:

안녕하세요, Fixer1234님, 자세한 내용은 다음과 같습니다.

  • 매크로가 올바르게 작동하는 경우 "xx"와 "a"는 함께 존재하지 않을 수 있습니다.
  • 'xx' 행만 숨겨야 합니다.
  • "xx" 값은 숨길 수 없는 값과 조합되지 않습니다.
  • "a" 값은 숨겨야 하는 값과 결합되지 않습니다.
  • 숨길 필요가 없는 "xx 또는 "a"를 포함하지 않는 다른 행이 있습니다(이 열에 "a"를 추가해야 합니까, 아니면 IfElse를 완전히 제거해야 합니까?).
  • "xx" 행에 다른 수식이 포함되어 있습니다. 수식의 결과가 비어 있으면 해당 행을 숨겨야 함을 의미합니다.
  • "a" 행에는 동일한 수식이 있지만 결과가 생성되므로 숨겨서는 안 됩니다.

런타임 오류 '13': 유형이 일치하지 않으면 디버그가 첫 번째로 이동합니다. If Range("A8:A555").Value = "xx" Then

답변1

를 사용하여 범위의 모든 값을 테스트할 수는 없습니다 Range("A8:A555").Value = "xx". 유형 불일치 오류가 발생합니다.

범위의 각 셀을 반복하여 Value"xx"와 같은지 개별적으로 테스트해야 합니다.

코드 실행 속도를 높이려면 행을 감지할 때 행을 숨기지 말고 숨길 수 있는 Range행을 만든 Ranges다음 한 번에 모두 숨기세요.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cel As Range
Dim RangeToHide As Range

    'Test if Target is C4
    If Not Intersect(Target, [C4]) Is Nothing Then
        'Loop through each cell in range and test if it's "xx"
        For Each cel In Range("A8:A555")
            If cel = "xx" Then
                If RangeToHide Is Nothing Then
                    'Initialise RangeToHide because Union requires at least 2 ranges
                    Set RangeToHide = cel
                Else
                    'Add cel to RangeToHide
                    Set RangeToHide = Union(RangeToHide, cel)
                End If
            End If
        Next
        RangeToHide.EntireRow.Hidden = True
    End If
End Sub

답변2

이 VBA 코드를 표준 모듈로 사용하면 Column 에 XX또는 가 있는 모든 행을 숨기는 데 도움이 됩니다 .xxA

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address(True, True) = "$C$4" Then

Dim i As Integer
  Application.ScreenUpdating = False



    For i = 8 To 255

    If Sheets("Sheet1").Range("A" & i).Value = "XX" Or Sheets("Sheet1").Range("A" & i).Value = "xx" Then
    Rows(i & ":" & i).EntireRow.Hidden = True
    End If


    Next i
    End If

    Application.ScreenUpdating = True


End Sub

주의

a또는 이 있는 행 숨기기를 해제하기 위해 코드를 사용할 필요가 없습니다. A이미 표시되어 있기 때문입니다. 그리고 무엇보다도 사용된 코드는 Column 의 특정 Rows 를 숨기고 있습니다 A.

답변3

별도의 행을 어떻게 숨기나요?
내 생각은 이렇다.

Private Sub CheckBox1_Click()
If CheckBox1 = False Then
    [15:15].EntireRow.Hidden = True
    [3:3].EntireRow.Hidden = True
Else
    [15:15].EntireRow.Hidden = False
    [3:3].EntireRow.Hidden = False
End If

감사합니다
마티아스

관련 정보