여러 셀을 기반으로 행 숨기기

여러 셀을 기반으로 행 숨기기

내 데이터베이스가 점점 방대해지고 있어 좀 더 관리하기 쉽게 만들려고 노력하고 있습니다. 내가 기본적으로 하려는 일은 다음과 같습니다.

셀 E:E = "Complete"인 경우 해당 행을 숨깁니다.
Else 셀 F:F = "Complete"인 경우 해당 동일/해당 행을 숨깁니다.

이는 1년 중 52주 동안 계속되며 데이터에 따라 행 수가 무한해집니다.

간단한 코드를 시도했습니다.

Private Sub Worksheet_Change(check)

    If Range("E:Z") = Complete Then
        Rows("3:7000").EntireRow.Hidden = True
    Else
        Rows("3:7000").EntireRow.Hidden = False
    End If

이것은 컴파일되지만 그 외에는 많은 일이 발생하지 않습니다.

어떤 도움이라도 좋을 것입니다.

답변1

좋아, 이걸 따로 골라보자.

명령은 전체 행과 전체 열을 블록으로 처리하지만 실제로 현재 셀을 평가하지는 않습니다. VBA의 텍스트 값은 큰따옴표 안에 있어야 합니다. 그렇지 않으면 Excel에서는 이 값이 명명된 변수나 개체라고 예상합니다.

내가 아는 한, "Complete"라는 단어를 입력하려면 E부터 Z까지의 열을 확인해야 합니다. Worksheet_Change 이벤트는 대상, 즉 변경된 셀에 작용합니다. 셀이 E부터 Z까지의 열에 있는지 확인하려면 Target이 해당 범위와 교차하는지 확인할 수 있습니다.

Intersect(Target, Range("E:Z"))

이 명령은 범위 개체를 반환합니다. 변경된 셀이 지정된 범위에 없으면 아무 것도 반환되지 않습니다. 따라서 다음은 약간 이중 부정이지만 교차 개체가~ 아니다아무것도 아님. 이는 다음과 같이 쓴다.

If Not Intersect(Target, Range("E:Z")) Is Nothing Then
'   do something
End If

다음으로 대상 셀의 값이 "Complete"인지 확인하려고 합니다. 대소문자를 구분하지 않도록 하는 것이 좋은 생각일 수 있으므로 대상을 로 래핑하면 UCase이를 처리할 수 있습니다.

If Not Intersect(Target, Range("E:Z")) Is Nothing Then
    If UCase(Target.Value) = "COMPLETE" Then
        ' some code to hide the row
    End If
End If

행을 숨기는 코드는 대상 셀의 행 번호를 가져와야 합니다. 를 사용하여 수행할 수 있으며 사용한 것과 유사한 명령 Target.Row에 입력할 수 있지만 대상 셀의 행에 대해서만 적용됩니다.Rows()

Rows(Target.Row).EntireRow.Hidden = True

지금까지 코드는 다음과 같습니다.

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("E:Z")) Is Nothing Then
    If UCase(Target.Value) = "COMPLETE" Then
        Rows(Target.Row).EntireRow.Hidden = True
    End If
End If

End Sub

... 개별 행에 적용됩니다. 그러나 "Complete"를 여러 행에 한꺼번에 복사하면 대상에 둘 이상의 행이 포함되며 이를 반영하도록 코드를 조정해야 합니다. cel이라는 범위를 선언한 다음 대상 범위의 각 셀을 반복합니다. 이제 UCase 및 Rows 명령이 cel대신에 주소를 지정해야 합니다.Target

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

Dim cel As Range
If Not Intersect(Target, Range("E:Z")) Is Nothing Then
    For Each cel In Target
        If UCase(cel.Value) = "COMPLETE" Then
            Rows(cel.Row).EntireRow.Hidden = True
        End If
    Next cel
End If

End Sub

그리고 거기에 있습니다.

관련 정보