我有一张约有一百万行的表格。在一个特定列中,我的数字范围从0
到50,000
。
我试图在过滤范围内确定过滤范围内有多少单元格落在某个值内。
我可以轻松地执行=COUNTIF(L:L, "<5000")
查看有多少行少于5,000,或=COUNTIFS(L:L,">500",L:L,"<5000")
可以看到TOTAL范围内的数字介于两个数字之间,但我无法弄清楚怎么做这些中的任何一个都在过滤范围内。
通常使用过滤后的数据我会使用=SUBTOTAL
函数,但我无法看到任何已建立的=SUBTOTAL
函数在此示例中是如何工作的。
有什么想法吗?
答案 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))