根据单元格值在工作表上隐藏多行

时间:2018-10-19 14:03:19

标签: excel vba

我正在尝试使用Excel 2013在单元格为某个值时隐藏和取消隐藏行。

此表格应根据给出的答案进行扩展。

当C16 = YES时,隐藏18:22行

如果C16 =否,则隐藏24:38行

当C16 =空白时,隐藏18:38行

当L43 = YES时,取消隐藏第43:68行(如果不是,则显示零)

我尝试了2种方法。

首先:进入工作表-在右上角的下拉列表中选择更改

Private Sub Worksheet_Change(ByVal Target As Range)

    Range("A18:A22").EntireRow.Hidden = (Range("$C$16").Value = "Yes")

    Range("A24:A38").EntireRow.Hidden = (Range("$C$16").Value = "NO")

    Range("A18:A38").EntireRow.Hidden = (Range("$C$16").Value = "")

    Range("A43:A68").EntireRow.Hidden = (Range("$L$43").Value = "0")

End Sub

第二:这里的代码:

Unhide rows based on cell value

使用这两种方法,似乎只有一项更改在进行。因此更改了单元格C16,但这意味着范围L43被忽略了

当单元格为空白时,它也没有任何改变。它保持原样,并且没有按要求隐藏列。

2 个答案:

答案 0 :(得分:3)

您的范围重叠,因此即使C16 = "Yes"C16 = ""将覆盖它并取消隐藏它。 L42可能也是一个数字,在将其与文本值进行比较时,请尝试使用以下内容。您的代码也将在工作表中的每个更改上运行,因此也将其更新为仅在C16L43更改时运行

Private Sub Worksheet_Change(ByVal Target As Range)
    With Me
        If Not Intersect(Target, Union(.Range("C16"), .Range("L43"))) Is Nothing Then
            .Range("A18:A38").EntireRow.Hidden = False
            Select Case LCase(.Range("C16").Value2)
                Case "yes"
                    .Range("A18:A22").EntireRow.Hidden = True
                Case "no"
                    .Range("A24:A38").EntireRow.Hidden = True
                Case Else
                    .Range("A18:A38").EntireRow.Hidden = True
            End Select

            .Range("A43:A68").EntireRow.Hidden = False
            Select Case LCase(.Range("L43").Value2)
                Case "yes"
                    .Range("A43:A68").EntireRow.Hidden = False
                Case Else
                    .Range("A43:A68").EntireRow.Hidden = True
            End Select
        End If
    End With
End Sub

评论后

根据您的评论,我会将其分为两部分。第一个将监视下拉列表并在该单元格的更改上执行。第二个将使用calculate事件进行更新。将这些“替换”放在相应的表格中

Private Sub Worksheet_Change(ByVal Target As Range)
    With Me
        If Not Intersect(Target, Union(.Range("C16"), .Range("L43"))) Is Nothing Then
            .Range("A18:A38").EntireRow.Hidden = False
            Select Case LCase(.Range("C16").Value2)
                Case "yes"
                    .Range("A18:A22").EntireRow.Hidden = True
                Case "no"
                    .Range("A24:A38").EntireRow.Hidden = True
                Case Else
                    .Range("A18:A38").EntireRow.Hidden = True
            End Select
        End If
    End With
End Sub

Private Sub Worksheet_Calculate()
    Application.EnableEvents = False
    With Me
        .Range("A43:A68").EntireRow.Hidden = False
        Select Case LCase(.Range("L43").Value2)
            Case "yes"
                .Range("A43:A68").EntireRow.Hidden = False
            Case Else
                .Range("A43:A68").EntireRow.Hidden = True
        End Select
    End With
    Application.EnableEvents = True
End Sub

答案 1 :(得分:2)

尝试:

With Worksheets("Sheet1")
    .Rows("18:68").EntireRow.Hidden = False
    opt = UCase(.Range("C16").Value)
    Select Case opt
    Case "YES"
        Rows("18:22").EntireRow.Hidden = True
    Case "NO"
        Rows("24:38").EntireRow.Hidden = True
    Case ""
        Rows("18:38").EntireRow.Hidden = True
    Case Else
        MsgBox "Invalid option in cell C16."
    End Select
    If UCase(.Range("L43").Value) = "Yes" Then
        Rows("43:68").EntireRow.Hidden = True
    Else
        MsgBox "Invalid option in cell L43."
    End Select
End With

...尽管我不明白您想要成为'0'的原因。