【问题标题】:row count for visible cells only仅可见单元格的行数
【发布时间】:2016-04-01 13:37:54
【问题描述】:

我想创建一个用公式填充空白单元格的宏。该公式将引用上面的单元格,但仅在我将Subtotal 应用于我的数据之后,以及仅在具有Total 的行上(参见下面的示例截图):

到目前为止,我的宏将应用小计,然后过滤包含总计的列,并过滤单元格中包含 Total 的任何内容。之后它计算所有不可见的行并减去 2(我不想计算标题和总计)。它进行计数并循环公式应用程序。

也就是说,它在大多数情况下都有效,但每隔一段时间就会误数 2,我不知道为什么。

数据格式相同,每次使用相同的列。

我希望我清楚地解释了我的问题,并且示例和代码 sn-p 就足够了:

'filling in empty cells on subtotal line
Cells.Select
    Selection.AutoFilter
    LastRow = Range("G" & Rows.Count).End(xlUp).Row
        x = LastRow
    ActiveSheet.Range("G1:G" & x).AutoFilter Field:=7, Criteria1:="=*total*", Operator:=xlAnd, Criteria2:="<>Grand Total", Operator:=xlAnd

Set rng = ActiveSheet.AutoFilter.Range
'-2 is to NOT count the header or Grand Total for my loop count
RowCount = rng.Columns(2).SpecialCells(xlCellTypeVisible).Count - 2
    r = RowCount

【问题讨论】:

    标签: excel vba rowcount


    【解决方案1】:

    问题是,您的范围没有继续(因为过滤的单元格)。这会阻止 rows.count 正常工作。 试试这个:

    Number_of_Rows= rng.Resize(, 1).SpecialCells(xlCellTypeVisible).Count
    

    【讨论】:

    • 我用你的建议替换了我的行,但仍然有同样的问题。 'RowCount = rng.Columns(2).SpecialCells(xlCellTypeVisible).Count - 2 RowCount = rng.Resize(, 1).SpecialCells(xlCellTypeVisible).Count - 2 r = RowCount
    • 奇怪,你试过反其道而行之吗?计算不可见的行并从总数中减去它们?有同样的问题吗?
    【解决方案2】:

    我注意到你的代码中有一些不正确的地方,我不知道它是否是这篇文章的错字,或者它是否真的在你的代码中..

    ActiveSheet.Range("G1:G" & x).AutoFilter Field:=7, Criteria1:="=*total*", Operator:=xlAnd, Criteria2:="<>Grand Total", Operator:=xlAnd
    

    我可以想象,如果它正在运行,它可能会在某个时候吓坏。它有 2 'Operator:=xlAnd' 这很奇怪,我预计会出错。

    这个错误计数可能是几件事,如果不是由这个坏的过滤器部分引起的,它可能只是一些简单的被忽略的事情,

    什么是行数?这可能会将活动单元格(如果您喜欢,光标)放在一个位置,当您使用 .End(xlUp) 时,它可能会跳过表格中的几个空白单元格?如果是这种情况,它可能会过滤但忽略几行,从而使额外的行保持可见,这不应该......可能

    RowCount = rng.Columns(2).SpecialCells(xlCellTypeVisible).Count - 2
    

    这绝对是令人感兴趣的,因为您的问题是 2 行有时被误算并且您在这里明确地拿走了 2 行 (-2),但我怀疑这是原因,尽管它可能是它总是 2 的原因,所以它必须在上面的代码............

    发生这种情况时,您还需要检查表中的数据,并尽可能发布,如果没有真实数据,很难确定这里发生的事情。

    如果您可以重现问题或发布一些真实数据,请回帖,这将是一个很大的帮助。

    【讨论】:

      【解决方案3】:

      感谢 Doktor,但我环顾四周,发现这个解决方案可以解决我的问题,它总是计算正确的循环数。

          Dim LastRow as interger, x as integer
      
          'add autofilter
          Cells.Select
          Selection.AutoFilter
          'filter for Total
          ActiveSheet.Range("G1:G" & x).AutoFilter Field:=7, Criteria1:="=*total*", Operator:=xlAnd, Criteria2:="<>Grand Total", Operator:=xlAnd
      
          'find last row
          LastRow = Range("G" & Rows.Count).End(xlUp).Row
             x = LastRow
      
          'count visible rows
          RowCount = Range("G1:G" & x).Rows.SpecialCells(xlCellTypeVisible).Count - 2
             r = RowCount
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-22
        • 2016-05-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多