基于多个单元格值隐藏/取消隐藏行

时间:2021-03-29 06:39:13

标签: excel vba excel-formula

我的问题需要帮助。如何在此代码中包含两个不同的条件以隐藏/取消隐藏我的行,如果我的一个条件是 TRUE/FALSE 而另一个是带有某些值的下拉列表? 对于第一个标准,使用 True/False,如果选择了 True,则隐藏所有 False 行,对于另一个我有下拉菜单的标准,我唯一想要的就是当我选择 0 作为取消隐藏所有的值时行,以恢复我的原始数据状态。

p.s True/False 行是一个“辅助列”,我实际上在其中过滤了另一个值(从下拉列表中)。如果我选择 TRUE,那么我拥有所有需要的值,如果它是 FALSE,那么我将它们从列表中排除。

Sub Hide_Unhide_Rows()

  If Range("B3").Value = "Passed" Then
    Rows("5:10").EntireRow.Hidden = True
  ElseIf Range("B3").Value = "Failed" Then
    Rows("5:10").EntireRow.Hidden = False
  End If

End Sub

1 个答案:

答案 0 :(得分:0)

切换隐藏/取消隐藏

  • 在第二个过程中调整 Range("B3") 和常量。

工作表模块例如Sheet1

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Range("B3"), Target) Is Nothing Then
        toggleHide Range("B3")
    End If
End Sub

标准模块Module1

Option Explicit

Sub toggleHide(ByVal CellRange As Range)
    
    Const RowsAddress As String = "5:10"
    Const cCol As String = "G"
    Const Crit As Boolean = False
    
    With CellRange.Worksheet
        If .AutoFilterMode Then .AutoFilterMode = False
        Dim rg As Range: Set rg = .Rows(RowsAddress)
        
        Select Case CellRange.Value
        Case "Hide"
            Dim drg As Range
            Set drg = rg.Columns(cCol).Offset(-1).Resize(rg.Rows.Count + 1)
            drg.AutoFilter 1, Crit
            If WorksheetFunction.Subtotal(103, drg) > 1 Then
                Dim frg As Range: Set frg = rg.SpecialCells(xlCellTypeVisible)
                .AutoFilterMode = False
                frg.EntireRow.Hidden = True
            End If
        Case "Show"
            rg.Hidden = False
        'Case Else
        End Select
    
    End With

End Sub