简体   繁体   English

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

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

I'm trying, with Excel 2013, to hide and unhide rows when a cell is a certain value. 我正在尝试使用Excel 2013在单元格为某个值时隐藏和取消隐藏行。

It's a form which should expand based on answers given. 这种形式应该根据给出的答案进行扩展。

When C16 = YES hide rows 18:22 当C16 = YES隐藏行18:22

When C16 = NO hide rows 24:38 当C16 = NO时隐藏行24:38

When C16 =blank hide rows 18:38 当C16 =空白时隐藏行18:38

When L43 = YES unhide rows 43:68 (if it's not yes a zero is displayed) 当L43 = YES时,取消隐藏第43:68行(如果不是,则显示零)

I have tried 2 methods. 我尝试了2种方法。

First: Into the worksheet - selected change in the top right dropdown 第一:进入工作表-在右上角的下拉菜单中选择更改

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

Second: code from here: 第二:来自这里的代码:

Unhide rows based on cell value 根据单元格值取消隐藏行

Using both of these methods only one of the changes seems to go ahead. 使用这两种方法,似乎只有一项更改正在进行。 So cell C16 is changed but that means range L43 is ignored 因此,单元格C16发生了变化,但这意味着范围L43被忽略了

Also when the cell was blank it didn't change anything. 同样,当单元格为空白时,它什么也没有改变。 It remained as is and didn't hide the columns as required. 它保持原样,并且没有按要求隐藏列。

Your ranges overlap so even if C16 = "Yes" the line C16 = "" will override it and unhide it. 您的范围会重叠,因此即使C16 = "Yes" ,行C16 = ""也会覆盖并取消隐藏它。 L42 is probably also a number where as you're comparing it to a text value try using the following instead. L42可能也是一个数字,在将其与文本值进行比较时,请尝试使用以下内容。 Your code would run on every single change in your sheet as well so have also updated it to only run when either C16 or L43 is changed 您的代码也将在工作表中的每个更改上运行,因此也将其更新为仅在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

After comments 评论后

I'd break this into two from your comments. 根据您的评论,我将其分为两部分。 The first would watch the dropdown and execute on the change of that cell. 第一个将监视下拉列表并在该单元格的更改上执行。 The second would update using the calculate event. 第二个将使用calculate事件进行更新。 Put these Subs in the sheets where applicable 将这些潜艇放在适用的表格中

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

Try: 尝试:

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

...though I didn't understand what you wanted to be '0'. ...虽然我不明白您想设为0。

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

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