仅可见单元格的行数

row count for visible cells only

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

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

就是说,它在大部分时间都有效,但有时它会误算 2,我不明白为什么。

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

我希望我能清楚地解释我的问题并且示例和代码片段足够了:

'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

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

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

我注意到你的代码中有些地方不对,我不知道它是否是这个 post 的错字,或者它是否真的在你的代码中..

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

我想如果这是 运行 它可能会在某个时候发疯。它有 2 'Operator:=xlAnd' 这很奇怪,我预计会出现错误。

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

什么是Rows.Count?这是否可能将活动单元格(如果您愿意,可以使用光标)置于使用 .End(xlUp) 时它可能会跳过 table 中的几个空白单元格的位置?如果是这种情况,它可能会过滤但忽略几行,使额外的行保持可见,而这些行不应该......可能

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

这绝对值得关注,因为您的问题是 2 行有时会被错误计算并且您在此处明确删除了 2 行 (-2),但我怀疑这是原因,尽管它可能是它始终为 2 的原因,所以它必须在上面的代码中.......

发生这种情况时,您还需要检查 table 中的数据,并且 post 如果可能的话,如果没有真实数据,确实不容易查明这里发生了什么。

只要post回来,如果你能重现问题或post一些真实的数据,那将是一个很大的帮助。

谢谢 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