使用基于应用的过滤器的数据计算行/单元的数量

时间:2018-03-22 16:20:30

标签: vba excel-vba excel

如何根据应用的过滤器计算包含数据的行数?

所有我能找到的方法都是像xlUp, xlDown这样的方法我不能应用于此,因为它会给我最后一行而不是带有过滤数据的行数。

例如

1    animal age
2    dog    10
3    cat    15

我在cat上应用过滤器并获取下表:

1    animal age
3    cat    15

用xlUp或向下它会告诉我最后一行数是3,但显然只有1行带有过滤数据

3 个答案:

答案 0 :(得分:5)

工作表的SUBTOTAL function可以计算列中的可见数据。

dim i as long
i = application.subtotal(103, columns(1))
debug.print i

答案 1 :(得分:4)

这个怎么样?它计算过滤范围内第一列中的可见细胞。

Sub test()

data_visible_rows = ActiveSheet.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1

End Sub

答案 2 :(得分:0)

假设您有A1范围内的数据:C3

enter image description here

并且您手动应用了过滤器

enter image description here

然后声明

dim rng as Range
set rng = Range("$A$2:$C$3").SpecialCells(xlCellTypeVisible)

将返回对仅包含可见单元格的Range的引用。所以你省略了标题。

然后你可以打电话

rng.Count / rng.Columns.Count

获得所需的结果。当然,你可以一次性完成,而不需要任何声明。我之前的解释仅用于指导目的。

Range("$A$2:$C$3").SpecialCells(xlCellTypeVisible).Count / Range("$A$2:$C$3").Columns.Count

这应该有用。