过滤范围

时间:2015-09-28 17:40:40

标签: excel vba excel-vba excel-formula

我有一张约有一百万行的表格。在一个特定列中,我的数字范围从050,000

我试图在过滤范围内确定过滤范围内有多少单元格落在某个值内。

我可以轻松地执行=COUNTIF(L:L, "<5000")查看有多少行少于5,000,或=COUNTIFS(L:L,">500",L:L,"<5000")可以看到TOTAL范围内的数字介于两个数字之间,但我无法弄清楚怎么做这些中的任何一个都在过滤范围内

通常使用过滤后的数据我会使用=SUBTOTAL函数,但我无法看到任何已建立的=SUBTOTAL函数在此示例中是如何工作的。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

这是一个VBA解决方案。我已对代码进行了评论,因此您不应该在理解它时遇到任何问题,但如果您这样做,则只需回发。

Sub Sample()
    Dim ws As Worksheet
    Dim lRow As Long, n As Long
    Dim rng As Range, rngArea As Range

    '~~> Change this as applicable
    Set ws = ThisWorkbook.Sheets("Sheet1")

    With ws
        '~~> Finding last row in Col L
        lRow = .Range("L" & .Rows.Count).End(xlUp).Row - 1

        'Debug.Print Intersect( _
                              .Range("L2:L" & lRow), _
                              .Range("L1").Offset(1, 0).SpecialCells(xlCellTypeVisible) _
                              ).Address

        '~~> This is your range of all visible cells till the last row in column L
        '~~> except the header:
        Set rng = Intersect( _
                              .Range("L2:L" & lRow), _
                              .Range("L1").Offset(1, 0).SpecialCells(xlCellTypeVisible) _
                              )

        '~~> Since the area could be non contiguous we use Countif per area and add up
        For Each rngArea In rng
            n = n + Application.Evaluate("=COUNTIFS(" & rngArea.Address & _
                                         ","">500""," & rngArea.Address & ",""<5000"")")
        Next

        Debug.Print n
    End With
End Sub

答案 1 :(得分:1)

我确定这已经发生在每个人身上,但是在阅读了这个主题的帖子30分钟而没有找到任何内容后,我发布了SO,只是为了找到一个像4分钟后的解决方案..... ..

此解决方案适用于L列中的数据,其中我搜索的条件是&#34;低于5000&#34;

=SUMPRODUCT(SUBTOTAL(2,OFFSET(L7,ROW(L7:L999999)-ROW(L7),,1)),--(L7:L999999 < 5000))