我希望能够过滤并显示计数&全局范围和可见(过滤)范围的sumif。使用以下代码,我可以显示计数和&全球范围的总和:
AtmCount = Application.WorksheetFunction.CountIf(Range("X3:X4533"), ">0")
AtmSum = Application.WorksheetFunction.Sum(Range("X3:X4533"))
通过这部分,我可以显示过滤范围的计数:
AtmCurrentCount = Range("X3:X4533").SpecialCells(xlCellTypeVisible).Count
AtmCurrentSum = ???
有人可以帮助我获得仅显示可见行的总和吗?
答案 0 :(得分:6)
这将做你想要的。将visibleTotal设置为total的相应数据类型,并更改ws和rng对象以匹配工作簿中的对象。
Sub SumVisible()
Dim ws As Worksheet
Dim rng As Range
Dim visibleTotal As Long
Set ws = ThisWorkbook.Sheets("Sheet1")
Set rng = ws.Range("B1:B7")
ws.AutoFilterMode = False
rng.AutoFilter field:=1, Criteria1:=5
visibleTotal = Application.WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeVisible))
' print to the immediate window
Debug.Print visibleTotal
End Sub
如果您只想对过滤范围的一部分求和(例如,您在A列上过滤但希望列B的总和),请参阅此问题并回答:Copy/Paste/Calculate Visible Cells from One Column of a Filtered Table。
答案 1 :(得分:2)
如果你只想要总和而不是sumif
AtmCurrentSum = application.worksheetfunction.subtotal(9, Range("X3:X4533"))
答案 2 :(得分:0)
我刚遇到这个网站。 https://www.techrepublic.com/blog/microsoft-office/how-to-sum-values-in-an-excel-filtered-list/
基本公式是 x = Application.WorksheetFunction.Subtotal('code number','range') 你想要的公式是 x = Application.WorksheetFunction.Subtotal(109,range(x,y))
答案 3 :(得分:0)
给定功能Sub SumVisible()不适用于我,而是我使用了小计功能。小心使用编号为109,102,104,105的功能忽略隐藏值。即仅在可见单元格上进行计算。
“ https://support.office.com/en-us/article/subtotal-function-7b027003-f060-4ade-9040-e478765b9939”
aSum = WorksheetFunction.Subtotal(109, CalcRange)
aCount = Application.WorksheetFunction.Subtotal(102, CalcRange)
aMax = Application.WorksheetFunction.Subtotal(104, CalcRange)
aMin = Application.WorksheetFunction.Subtotal(105, CalcRange)
答案 4 :(得分:0)
如果需要计算过滤列表中可见项目的数量,请使用SUBTOTAL函数,该函数会自动忽略过滤器隐藏的行。
SUBTOTAL函数可以执行诸如COUNT,SUM,MAX,MIN,AVERAGE,PRODUCT等计算(请参见下表)。它会自动忽略在过滤列表或表格中不可见的项目。这使得它非常适合显示列表中可见的项目,可见行的小计等。它还提供了手动隐藏的控件行。
您的问题的解决方案是,当过滤器处于活动状态时,计算在A列和B列中可见的非空白行数,请使用:
AtmCurrentSum = Application.WorksheetFunction.Subtotal(109, Range("$X$3:$X$4533"))
应用小计公式时要记住的要点:
答案 5 :(得分:0)
如果您使用的是Excel 2016,则可以使用
Sum = Application.WorksheetFunction.Subtotal(9, Range("$D2:D" &
Rows(Rows.Count).End(xlUp).Row))
9指定要对可见行求和 我必须求和的数据在D列中。