4

我有一个包含多个嵌套 IF 语句的 SUM 数组公式,因此效率非常低。我的公式跨越 500 多行,但这里是它的一个简单版本:

{=SUM(IF(IF(A1:A5>A7:A11,A1:A5,A7:A11)-A13:A17>0,
IF(A1:A5>A7:A11,A1:A5,A7:A11)-A13:A17,0))}

如您所见,公式的前半部分检查数组大于零的位置,如果是,则将公式第二部分中的值相加。

你会注意到相同的 IF 语句在那里重复了两次,这对我来说效率很低,但这是我得到正确答案的唯一方法。

我的示例数据如下:

电子表格中的示例数据 http://clients.estatemaster.net/SecureClientSite/Download/TempFiles/example.jpg 在这种情况下,使用我上面提到的公式,答案应该是 350。

如果我试图在数组中放入一个 MAX 语句,因此删除测试以找到它大于零的位置,所以它是这样的:

{=SUM(MAX(IF(B2:B6>B8:B12,B2:B6,B8:B12)-B14:B18,0))}  

但是,它似乎只计算每个范围内的第一行数据,它给了我 70 的错误答案。

有谁知道我可以通过不需要在其中重复 IF 语句来减小公式的大小或使其更有效?


更新

吉米

您建议的 MAX 公式实际上并不适用于所有情况。

如果我将第 1 行到第 5 行中的示例数据更改如下(显示某些数字大于第 7 到第 11 行中它们各自的单元格,而某些数字则较低)

电子表格中的示例数据 http://clients.estatemaster.net/SecureClientSite/Download/TempFiles/example2.jpg

我试图达到的正确答案是 310,但是您建议 MAX 公式给出的错误答案是 275。

我猜这个公式需要是一个数组函数才能给出正确的答案。

还有其他建议吗?

4

5 回答 5

3
=MAX( MAX( sum(A1:A5), sum(A7:A11) ) - sum(A13:A17), 0)
于 2008-11-25T00:45:44.127 回答
1

一种计算效率更高(尤其是重新计算效率更高)的方法是使用辅助列而不是数组公式:

C1:=MAX(A1,A7)-A13
D1:=IF(C1>0,C1,0)

将这两个都复制 5 行

E1:=SUM(D1:D5)

然后,Excel 将仅根据任何更改的值重新计算公式,而不必在每次任何单个数字更改时都计算数组公式所隐含的所有虚拟列。即使你改变了所有的数字,它也做更少的计算。

于 2008-12-02T16:24:25.213 回答
0

您可能需要查看 VB 宏编辑器。在“工具”菜单中,转到“宏”并选择“Visual Basic 编辑器”。这提供了一个完整的编程环境,您可以在其中编写自己的函数。

VB 是一种简单的编程语言,谷歌有你需要的所有指南。

在那里,您可以编写一个类似 MySum() 的函数,并让它以您自己编写的清晰方式执行您真正需要的任何数学运算。

我把这个从谷歌上拉下来了,它看起来像是一个很好的设置指南。 http://office.microsoft.com/en-us/excel/HA011117011033.aspx

于 2008-11-25T04:51:09.590 回答
0

那这个呢?

=MAX(SUM(IF(A1:A5>A7:A11, A1:A5, A7:A11))-SUM(A13:A17), 0)

编辑:

糟糕——错过了扔掉底片的部分。那这个呢?不知道是不是更快...

=SUM((IF(A1:A5>A7:A11,IF(A1:A5>A13:A17,A1:A5,A13:A17),IF(A7:A11>A13:A17,A7:A11,A13:A17))-A13:A17))

编辑2:

这对你有什么影响?

=SUM((((A1:A5>A13:A17)+(A7:A11>A13:A17))>0)*(IF(A1:A5>A7:A11,A1:A5,A7:A11)-A13:A17))
于 2008-11-27T00:02:09.907 回答
0

这似乎有效:

{=SUM(IF(A1:A5>A7:A11,A1:A5-A13:A17,A7:A11-A13:A17))}

编辑 - 不处理减法最终为负的情况

这行得通 - 但它更有效吗???

{=SUM(IF(IF(A1:A5>A7:A11,A1:A5,A7:A11)>A13:A17,IF(A1:A5>A7:A11,A1:A5,A7:A11)-A13:A17,0))}
于 2008-11-25T18:54:09.233 回答