如果范围包含某些值,则隐藏特定行

时间:2019-03-08 09:39:51

标签: excel vba

我想对自动化数据表提供一些帮助。

在E7:V7(以下为r)的范围内,我有相同的下拉列表,每个列表都有四个不同的值(“-”;“打开”;“关闭”;“均为”)。

r仅包含"-"时,我想隐藏行21:50

  • "open"显示行21:30
  • "close"显示行31:50
  • "both"显示行21:50

例如:

  • 如果E7 =“-”,F7 =“ open”,则显示21:30行,而31:50隐藏。
  • 如果E7 =“-”,F7 =“ both”,则显示所有行。

我希望已经足够清楚了。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("E7").Value = "-" Then
        Rows("21:50").EntireRow.Hidden = True
    ElseIf Range("E7").Value = "open" Then
        Rows("21:30").EntireRow.Hidden = False
        Rows("31:50").EntireRow.Hidden = True
    ElseIf Range("E7").Value = "close" Then
        Rows("31:50").EntireRow.Hidden = False
        Rows("21:30").EntireRow.Hidden = True
    ElseIf Range("E7").Value = "both" Then
        Rows("21:50").EntireRow.Hidden = False
    End If
End Sub

此代码仅适用于一个条件,但我希望它有助于阐明情况。

1 个答案:

答案 0 :(得分:0)

如我的评论中所建议:使用Application.Intersect methodSelect Case statement

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim AffectedCells As Range
    Set AffectedCells = Intersect(Target, Target.Parent.Range("E7:V7"))

    If Not AffectedCells Is Nothing Then
        Dim Cell As Range
        For Each Cell In AffectedCells
            Select Case Cell.Value
                Case "-"
                    Target.Parent.Rows("21:50").Hidden = True
                Case "open"
                    Target.Parent.Rows("21:30").Hidden = False
                    Target.Parent.Rows("31:50").Hidden = True
                Case "close"
                    Target.Parent.Rows("31:50").Hidden = False
                    Target.Parent.Rows("21:30").Hidden = True
                Case "both"
                    Target.Parent.Rows("21:50").Hidden = False
            End Select
        Next Cell
    End If
End Sub