获取VBA中可见行的总和

时间:2013-07-24 13:21:24

标签: excel excel-vba excel-2007 vba

我希望能够过滤并显示计数&全局范围和可见(过滤)范围的sumif。使用以下代码,我可以显示计数和&全球范围的总和:

AtmCount = Application.WorksheetFunction.CountIf(Range("X3:X4533"), ">0")
AtmSum = Application.WorksheetFunction.Sum(Range("X3:X4533"))

通过这部分,我可以显示过滤范围的计数:

AtmCurrentCount = Range("X3:X4533").SpecialCells(xlCellTypeVisible).Count
AtmCurrentSum = ???

有人可以帮助我获得仅显示可见行的总和吗?

6 个答案:

答案 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"))

Excel Subtotal Formula Arguments


应用小计公式时要记住的要点:

  • 当function_num(第一个参数)在1-11之间时,SUBTOTAL包含手动隐藏的值,但忽略由过滤器隐藏的值。
  • 当function_num在101-111之间时,SUBTOTAL排除所有类型的隐藏值。
  • 在过滤后的列表中,SUBTOTAL始终忽略隐藏行中的值,而与function_num无关。
  • SUBTOTAL忽略引用中存在的其他小计,以防止 重复计算
  • SUBTOTAL仅适用于垂直排列的垂直数据值。
  • 在“水平隐藏列”中,始终包含值,并且永远不会忽略它们。

答案 5 :(得分:0)

如果您使用的是Excel 2016,则可以使用

Sum = Application.WorksheetFunction.Subtotal(9, Range("$D2:D" & 
Rows(Rows.Count).End(xlUp).Row))

9指定要对可见行求和 我必须求和的数据在D列中。