繁体   English   中英

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

[英]Hide multiple rows on sheet based on cell value

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

这种形式应该根据给出的答案进行扩展。

当C16 = YES隐藏行18:22

当C16 = NO时隐藏行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

第二:来自这里的代码:

根据单元格值取消隐藏行

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

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

您的范围会重叠,因此即使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

尝试:

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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM