仅可见单元格的行数

时间:2016-04-01 13:37:54

标签: excel vba rowcount

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

enter image description here

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

那就是说,它在大部分时间里都有效,但是经常会错误地计算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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

我注意到你的代码中有些东西是不对的,我不知道这篇帖子上的拼写错误,或者它实际上是否在你的代码中......

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

我会想象如果它正在运行,它可能会在某些时候发生变形。它有2'运算符:= xlAnd'这很奇怪我会发现错误。

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

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

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

这肯定是有意义的,因为你的问题是2行有时错误计算,你明确地在这里取消2行(-2),但我怀疑这是原因虽然它可能是它总是2的原因,所以它必须在上面的代码........

当发生这种情况时,您还需要检查表格中的数据,并在可能的情况下发布,如果没有真实数据,这里确实很难找到最新情况。

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

答案 2 :(得分:0)

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