从Excel中增加的单元格范围获取最大值

在Excel中,我存储项目,并且对于每个项目,我知道我在给定的时间使用了多less,

Item 1 10 Item 2 20 Item 2 -10 Item 2 5 Item 1 10 Item 1 -5 

当价值是一个正数,我知道这是一个收益,当它是负数,那就是亏损。

通过简单的使用SUMIF ,我可以在最后知道我有多less从一个给定的项目。

不过,我想知道我曾经有过多less钱。 在这个例子中,例如,对于项目1,该数字将是20。 我知道我可以计算每个项目的不同列中的部分结果,然后在这些列上使用MAX ,但我想find一个解决scheme,用一个方程来解决这个问题。

看起来较新的AGGREGATE¹函数可以使用循环处理来模仿=SUMIFS(B$2:B2, A$2:A2, A2)的“助手”列。

以F5作为标准配方,

 =AGGREGATE(14, 6, SUMIFS(OFFSET(B$2, 0, 0, ROW($1:$6), 1), OFFSET(A$2, 0, 0, ROW($1:$6), 1), E5), 1) 

aggregate_sumifs

我通常不会因为其固有的易失性性质而改变使用偏移function ,而是重新调整范围以求和。


¹AGGREGATEfunction是在Excel 2010中引入的。它在早期版本中不可用。

² 只要整个工作手册中的任何内容发生变化,挥发性函数就会重新计算,而不仅仅是当影响其结果的事情发生变化时。 易失性函数的例子是间接 , 偏移 , 今天 , 现在 , 兰德和兰德维恩 。 CELL和INFO工作表函数的一些子函数也会使它们变得不稳定。

您可以使用VBA代码为您的工作表添加macros,如下所示:

 Public itemMax As Integer Private Sub Worksheet_Activate() Set itemMax = -1 End Sub Private Sub Worksheet_Change(ByVal target As Range) If Not (Intersect(target, Range("B1:B100")) Is Nothing) Then If IsNumeric(target) Then If target > itemMax Then itemMax = target MsgBox ("New max is: " & CStr(itemMax)) End If End If End If End Sub 

在这个例子中,我跟踪itemMax中的“全局最大值”,并检查添加的新项目数是否大于故意设置的低最大值。 我认为你是手动input这些值,一个接一个,所以YMMV。