当行中的范围为0时,隐藏行和上面的行

时间:2015-08-20 15:45:20

标签: excel vba excel-vba

在Excel 2013中,当行在列C到列H中的值为0时,我想隐藏行和它上面的行。列C到列H是合并的单元格。例如,如果C7:H7的值为0,我想隐藏第7行和第6行。这个C6的整个范围:H53。每隔一个奇数行都有文本或0。当奇数行号为0时,我想隐藏该行和它上面的偶数行号。对于工作簿中的另一个范围(C77:H233),我有一个工作宏,它隐藏了一个0值的行但是我无法找出正确的代码来隐藏行加上上面的行为C6:H53的范围。

Row #/COL A     COL B   COL C   COL D   COL E   COL F   COL G       COL H 
4 SALES/GROSS MARGIN                             
5                       Sales     Costs     GP%    Bdgt %    Bdgt Diff    
6 Siding                0       0     #DIV/0! #DIV/0!    
7                       0.00                                            
8 Tile                  0       0     #DIV/0!        #DIV/0!    0.00                                    
9                       0.00                        
10 Tools & Hardware    330     -315    0.045454545        #VALUE!    
11                     Two sales to Joe Roofing and Riviera Ridge Roofing with 
                       no budget. No comment from managers.                    
12 Windows              0       0    #DIV/0!        #DIV/0!    
13                      0.00                                             
14 Fabricated Products  0       0    #DIV/0!        #DIV/0!    
15                      0.00                                            

在上面的例子中,C7行中的值为0:H7我想隐藏第6行和第6行。 7,用C9中的值:H9 0然后隐藏行8& 9,用C13中的值:H13 0然后隐藏12& 13,用C15中的值:H15 0然后隐藏14& 15等我想要Rows 10& 11显示为C11:H11中有文字。

我尝试过的许多代码中的最后一个没有成功

Sub HideSales()

Dim cell As Range
For Each cell In Range("Sales")
If Sales.Address = "C7:H7" Then
If cell.Value = 0 Then
Rows(6:7).EntireRow.Hidden = True
Else
Rows(6:7).EntireRow.Hidden = False
End If

End Sub

VBE不喜欢几行 - 第一行Sub HideSales()以黄色突出显示,两行都有行(6:7)以红色突出显示。

不知道下一步该去哪里。放弃其他2个网站 - 甚至无法提交问题。

1 个答案:

答案 0 :(得分:0)

如果在C列中过滤掉零(从第6行开始),然后收集并存储该范围,您应该能够释放过滤器并用零隐藏行。

Sub hide_zeros()
    Dim rZEROs As Range

    On Error GoTo bm_Safe_Exit
    appTGGL bTGGL:=False

    With Worksheets("Sheet5")
        If .AutoFilterMode Then .AutoFilterMode = False
        .UsedRange.Offset(5, 0).EntireRow.Hidden = False
        With .Range(.Cells(5, 3), .Cells(Rows.Count, 3).End(xlUp))
            Debug.Print .Address(0, 0)
            '.EntireRow.Hidden = False
            .AutoFilter Field:=1, Criteria1:="=0", _
                        Operator:=xlOr, Criteria2:="=0.00"
            With .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0)
                If CBool(Application.Subtotal(103, .Cells)) Then
                    Set rZEROs = .SpecialCells(xlCellTypeVisible)
                End If
            End With
            .AutoFilter
            If Not rZEROs Is Nothing Then _
                rZEROs.EntireRow.Hidden = True
        End With
    End With

bm_Safe_Exit:
    appTGGL
End Sub

Sub appTGGL(Optional bTGGL As Boolean = True)
    Application.ScreenUpdating = bTGGL
    Application.EnableEvents = bTGGL
    Application.DisplayAlerts = bTGGL
End Sub

在:

Filter for Zeroes and Hide Before

后:

Filter for Zeroes and Hide after