首页 > 解决方案 > 过滤后如何查找范围内的行数

问题描述

代码给了我:应用程序定义或对象定义错误。

Sub test()

Dim rCell As Range
    Set rCell = Rows(1, 0).Offset(2, 0).SpecialCells(xlCellTypeVisible).Cells(1, 1)
    If rCell <> "" Then
        MsgBox rCell.Value
    End If
End Sub

我想知道在我过滤了一些数据后,第二行的单元格中是否有一个可见的值(因为第一行是标题)。

我正在过滤一个数据库,大多数时候在一个过滤器之后它会有所需的数据,但有时它仍然需要额外的过滤。

另一种看待我的问题的方法是:如果有两个以上的可见行,则继续过滤程序,否则继续宏。

标签: excelvbafilter

解决方案


好的,下面是您如何获取范围或工作表中可见行的计数:

Function VisibleRowcount() As Long

    Dim count As Long

    With ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible)
        For i = 1 To .Areas.count
            For j = 1 To .Areas(i).Rows.count
                count = count + 1
            Next j
        Next i
    End With

    VisibleRowcount = count

End Function

由于您真正想要的是在过滤后仍然可见 x 行数时执行更多操作,因此您将如何使用此函数来解决您的问题:

Sub main()

    If VisibleRowcount > 2 Then
        'your code here
    End If

End Sub

请注意,如果过滤器后没有可见的单元格,我的函数不喜欢你。有时它喜欢返回 1,有时返回 0 - 但到目前为止,我的测试在至少一个单元格仍然显示的情况下是正确的。


如果您将来阅读本文并且希望它处理没有可见单元格的情况,请通过评论告诉我,我会重新审视这个:)


推荐阅读