【问题标题】:Hide cells based on 2 criteria根据 2 个标准隐藏单元格
【发布时间】:2020-01-17 19:36:14
【问题描述】:

我正在尝试根据 2 个不同的单元格值隐藏行。我在单元格 B2 中有一个值,想隐藏 B5:B1000 中不符合条件的任何内容。我在单元格 D2 中还有一个值可以进一步排序,并希望隐藏 D5:D1000 中与 D2 中的条件不匹配的任何内容。如果用户在 B2 或 D2 中输入“全部”,则更复杂的是,我想取消隐藏它们各自的行。我发现 VBA 可以基于 B2 隐藏,但我正在调整代码以查看 D2。

Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Activate
If Not Application.Intersect(Range("B2"), Range(Target.Address)) Is Nothing Then


    Select Case Target.Value
    Case Is = "All": Rows("5:1000").EntireRow.Hidden = False
    Case Is <> "All": Rows("5:1000").EntireRow.Hidden = False
        For rownum = "5" To "1000"
            If Cells(rownum, 2).Value <> Range("B2") And Cells(rownum, 4).Value <> Range("D2") Then
                Cells(rownum, 2).EntireRow.Hidden = True
                Cells(rownum, 4).EntireRow.Hidden = True
            End If
        Next rownum
    End Select

End If


End Sub

【问题讨论】:

  • AutoFilter 怎么样。或者被过滤掉的行不是你想要的?我猜当您将 VisibleDropDown 指定为 False 时,您不会注意到它已被过滤

标签: excel vba criteria


【解决方案1】:

根据我的评论,您可能想试试Range.AutoFilter。想象一下以下数据:

运行以下代码:

Sub Test()

Dim rng As Range

With Sheet1
    If .Cells(2, 2).Value = "ALL" Or .Cells(2, 4).Value = "ALL" Then
        If .FilterMode Then .ShowAllData
    Else
        .Range("A4:E10").AutoFilter 1, VisibleDropDown:=False
        .Range("A4:E10").AutoFilter 2, .Cells(2, 2), VisibleDropDown:=False
        .Range("A4:E10").AutoFilter 3, VisibleDropDown:=False
        .Range("A4:E10").AutoFilter 4, .Cells(2, 4), VisibleDropDown:=False
        .Range("A4:E10").AutoFilter 5, VisibleDropDown:=False
    End If
End With

End Sub

结果:

您会看到VisibleDropDown 参数如何隐藏下拉箭头。如果这对您的用户来说没什么大不了的,您可以保留这些行(和参数)。默认设置为TRUE。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    相关资源
    最近更新 更多