【问题标题】:Hide a row and the row above when the range in the row is 0当行中的范围为0时隐藏一行和上面的行
【发布时间】:2015-08-20 15:45:20
【问题描述】:

在 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:H7 行中值为 0 的示例中,我想隐藏第 6 行和第 7 行,C9:H9 中的值 0 然后隐藏第 8 行和第 9 行,C13:H13 中的值 0然后隐藏 12 和 13,值在 C15:H15 0 然后隐藏 14 和 15 等。我希望行 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() 以黄色突出显示,具有 Rows(6:7) 的两行都以红色突出显示。

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

【问题讨论】:

  • 您的“For Each”循环末尾没有“Next”;您的“If”循环之一的末尾也没有“End If”。
  • 我不知道你为什么担心'零的行和它上面的行'。您要隐藏的每一行在 C 列中不是都有 0 或 0.00 吗?

标签: vba excel


【解决方案1】:

如果您在 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

之前:

      

之后:

      

【讨论】:

  • 致吉普德 - 你摇滚!!!!!!我对我的格式做了一些调整,效果很好。惊人的!我不知道你是怎么知道这一切的,但是哇。谢谢谢谢谢谢。
猜你喜欢
  • 2023-03-27
  • 1970-01-01
  • 2019-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多