我有大约一百万行的工作表。在一个特定的列中,我有从0
到50,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/