我有大约一百万行的工作表。在一个特定的列中,我有从050,000的数字。

我正在尝试确定在一个过滤范围内,有多少个单元格落入某个特定值内。

我可以轻松地执行=COUNTIF(L:L, "<5000")来查看少于5,000的行,或者可以通过=COUNTIFS(L:L,">500",L:L,"<5000")来查看TOTAL范围内介于两个数字之间的数字,但是我无法弄清楚如何在过滤范围内执行这两个操作。

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

有任何想法吗?

最佳答案

这是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

关于vba - 过滤范围内的条件计数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32828796/

10-10 18:47
查看更多