2016-09-23 32 views
1

获得最大的价值在Excel中我存储项目,并对每个项目我知道我使用了多少,有多少我在这样一个特定的时间了:从细胞的范围日益扩大在Excel

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

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

有了简单地使用SUMIF,我可以知道到底是我有多少目前从给定的项目。

不过,我想知道什么是我遇到过的最大量。在这个例子中,例如,对于项目1,该数字将为20。我知道我可以在每个项目的不同列中计算部分结果,然后对这些项目使用MAX,但我想找到一个可以用一个方程解决这个问题的解决方案。

回答

1

似乎较新的AGGREGATE¹ function可以使用其循环处理来模仿=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

我通常不改变宗教信仰使用OFFSET function的由于其固有的性质volatile²但重塑范围总和需要它。


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

²只要整个工作簿中的任何内容发生变化,即使影响其结果的事情发生变化,也会重新计算挥发性函数。 volatile的示例的功能是INDIRECT,OFFSET,TODAY,NOW,RANDRANDBETWEENCELLINFO工作表函数的一些子函数也会使它们变得不稳定。

+0

请注意,我已经为* Item 2 *更改了一个值,以便更精确地显示真实的计算结果。 – Jeeped

+0

这就是我需要的!我不知道这个“新”功能,我很高兴你介绍了我。不过,我想问一个问题:我没有看到用这种方式使用“ROW”。你能告诉我它应该如何工作吗?正如我所看到的,它会生成一个从1到6的数字数组。但是这不是说我应该将整个方程用作数组函数吗?如果我把它放到{}中,我的结果没有什么不同,但我想知道。在此上下文中的 – Letokteren

+0

[ROW功能](https://support.office.com/en-US/article/ROW-function-3A63B74A-C4D0-4093-B49A-E76EB49A6D8D)不指行TEH工作表上。它生成一个连续的数字数组;例如'1,2,3,4,5,6}'。这用于将SUMIFS范围重新设置为“B2:B2,B2:B3,... B2:B7”。 AGGREGATE的某些功能会产生无CSE(如SUMPRODUCT)的循环(aka * array *)计算,** 14 **([LARGE函数](https://support.office.com/en-in/article/large- function-3688ad91-0b0c-43db-8ef8-825a5e5871db))就是其中之一。 – Jeeped

0

您可以为您的工作表使用VBA代码添加宏像这样:

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并检查是否添加任何新的项目计数大于故意设置的低最大值。我认为你是手动输入这些值,一个接一个,所以YMMV。

+0

如果可以合理地假定您的[Worksheet_Change](https://msdn.microsoft.com/en-us/library/office/ff839775.aspx)事件宏将被修改,以便itemMax是在工作表上写的地方,它不会是审慎的公司; UDE是禁用[Application.EnableEvents属性]行(https://msdn.microsoft.com/en-us/library/office/ff821508.aspx ),以便Worksheet_Change不尝试在其本身上运行? – Jeeped