计算过滤的行

时间:2017-09-07 09:04:08

标签: excel vba

Excel - VBA 我想计算过滤表后有多少行。 我该怎么做呢? 我试过rows_count = Range("AX:AX").SpecialCells(xlCellTypeVisible).Count 但这给了我Excel 2010中的完整行数。

2 个答案:

答案 0 :(得分:0)

这是因为您指的是整个列而不仅仅是您的表。试试

rows_count = Range(cells(1,"AX"), cells(cells(rows.count,"AX").end(xlup).row,"AX")).SpecialCells(xlCellTypeVisible).Count

最好声明您要引用哪张表格,以便使用

With Sheets("Sheet1")
    rows_count = Range(.Cells(1, "AX"), .Cells(.Cells(.Rows.Count, "AX").End(xlUp).Row, "AX")).SpecialCells(xlCellTypeVisible).Count
End With

Sheet1是您所指的工作表的名称。

或者,如果您使用的是表格对象,则可以使用

获得答案
With Sheets("Sheet1").ListObjects(1)
    rows_count = .ListColumns(Columns("AX").Column).DataBodyRange.SpecialCells(xlCellTypeVisible).Count
End With

答案 1 :(得分:0)

一旦您应用了过滤器,只需使用以下内容:

rows_count = Worksheets("Sheet1").AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1

例如,我使用A2:C20填充了=RAND()并使用了以下代码:

Sub filter()
    Dim sht As Worksheet
    Dim rng As Range

    Set sht = ThisWorkbook.Worksheets("Sheet1")
    Set rng = sht.Range("A1:C20")

    sht.AutoFilterMode = False
    rng.AutoFilter Field:=1, Criteria1:="<0.5"

    MsgBox sht.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1        
End Sub