55

我使用SUM(B1..B20)公式对一列求和,但是当我按相邻列过滤数据时,总和不会更新以仅反映那些未过滤掉的行。如何做到这一点?

4

3 回答 3

100

您需要使用SUBTOTAL函数。SUBTOTAL函数忽略已被过滤器排除的行。

公式如下所示:

=SUBTOTAL(9,B1:B20)

函数编号9告诉它在数据范围B1:B20上使用SUM函数。

如果您通过隐藏行进行“过滤”,则函数编号应更新为109

=SUBTOTAL(109,B1:B20)

函数编号109也用于SUM函数,但忽略隐藏的行。

于 2009-04-17T10:31:13.640 回答
4

如果您没有使用自动过滤器(即您有手动隐藏的行),您将需要使用该AGGREGATE功能而不是SUBTOTAL.

于 2014-01-22T17:42:32.687 回答
2

当您使用自动过滤器过滤结果时,Excel 甚至都懒得隐藏它们:它只是将行高设置为零(至少到 2003 年,2007 年不确定)。

所以下面的自定义函数应该给你一个开始做你想做的事(用整数测试,没有玩过其他任何东西):

Function SumVis(r As Range)
    Dim cell As Excel.Range
    Dim total As Variant

    For Each cell In r.Cells
        If cell.Height <> 0 Then
            total = total + cell.Value
        End If
    Next

    SumVis = total
End Function

编辑:

您需要在工作簿中创建一个模块来放入函数,然后您可以像任何其他函数一样在工作表上调用它 (=SumVis(A1:A14))。如果您需要帮助设置模块,请告诉我。

于 2009-04-17T09:32:04.500 回答