7

在 Excel 中,我需要过滤并显示全局范围可见(或过滤)范围COUNTIFSUM

我已经可以使用以下代码显示全局范围COUNTIFSUM 。

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

我还可以获得可见(或过滤)范围的COUNT,如下所示:

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

但是,这仍然使可见(或过滤)范围的SUM完成

AtmCurrentSum = ???

我真的卡住了。请问,有人可以帮我吗?

4

6 回答 6

7

这将做你想要的。将 visibleTotal 设置为总计的适当数据类型,并更改 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

于 2013-07-24T13:29:52.763 回答
2

如果需要计算过滤列表中可见项目的数量,请使用 SUBTOTAL 函数,该函数会自动忽略被过滤器隐藏的行。

SUBTOTAL 函数可以执行计算,如 COUNT、SUM、MAX、MIN、AVERAGE、PRODUCT 等等(见下表)。它会自动忽略过滤列表或表格中不可见的项目。这使其非常适合显示列表中可见的项目数、可见行的小计等。它还提供手动隐藏的控制行。

您的问题的解决方案是在过滤器处于活动状态时计算 A 列和 B 列中可见的非空白行数,请使用:

AtmCurrentSum = Application.WorksheetFunction.Subtotal(109, Range("$X$3:$X$4533"))

Excel 小计公式参数


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

  • 当 function_num(第一个参数)在 1-11 之间时,SUBTOTAL 包括手动隐藏但忽略过滤器隐藏的值。
  • 当 function_num 介于 101-111 之间时,SUBTOTAL 排除所有类型的隐藏值。
  • 在过滤列表中,SUBTOTAL 总是忽略隐藏行中的值,而不管 function_num。
  • SUBTOTAL 忽略引用中存在的其他小计,以防止重复计算
  • SUBTOTAL 仅适用于垂直排列的垂直数据值。
  • 在水平隐藏列中,值总是被包括在内并且从不被忽略。
于 2019-02-19T23:38:29.790 回答
1

如果你只想要 sum 而不是 sumif

AtmCurrentSum = application.worksheetfunction.subtotal(9, Range("X3:X4533"))
于 2013-07-24T13:56:00.647 回答
0

给函数 Sub SumVisible() 对我不起作用,而是我使用了 Subtotal 函数。注意使用函数号 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)
于 2018-09-21T01:04:38.260 回答
0

如果您使用的是 Excel 2016,这将有效

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

9 指定您想要对可见行求和 我必须在其中找到总和的数据位于 D 列中希望这会有所帮助:)

于 2019-11-23T12:15:08.707 回答
-1

我刚看到这个网站。 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))

于 2017-12-22T00:33:16.290 回答