过滤后如何查找范围内的行数

时间:2018-08-03 16:36:34

标签: excel vba filter

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

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

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

我正在过滤数据库,大多数情况下,在执行一次过滤后,它将具有所需的数据,但有时仍需要进行其他过滤。

查看我的问题的另一种方法是:如果可见行多于两个,则继续执行过滤程序,否则继续执行宏。

1 个答案:

答案 0 :(得分:1)

好的,所以这是获取范围或工作表上可见行的计数的方法:

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-但是到目前为止,我的测试在至少仍显示一个单元格的情况下是正确的。


如果您将来要阅读此书,并且希望它处理没有可见单元格的情况,请通过评论让我知道,我将再次讨论:)