2008-11-24 46 views
4

我有一個具有多個嵌套的IF語句的SUM數組公式,它具有多個嵌套的IF語句,使得它非常低效。我的公式跨越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語句,這對我來說效率低下,但是我能得到正確答案的唯一方法。

示例數據I有如下:

Sample Data in spreadsheet 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在那裏陳述?


UPDATE

吉米

你的建議didnt實際上是所有方案中工作MAX公式。

如果我在行1到5如下(示出了一些數字比它們各自小區更大的行7至11,而一些數字是低級)

Sample Data in spreadsheet http://clients.estatemaster.net/SecureClientSite/Download/TempFiles/example2.jpg

改變了我的樣本數據

正確答案我嘗試才達到爲310,但你的建議MAX公式給出了275

Im的猜測公式需要有一個陣列功能,給出正確的答案不正確的答案。

其他建議?

回答

3
=MAX(MAX(sum(A1:A5), sum(A7:A11)) - sum(A13:A17), 0) 
+0

謝謝。它似乎比數組更快地工作。 – user40432 2008-11-25 03:35:57

0

您可能想要查看VB宏編輯器。在工具菜單中,轉到宏並選擇Visual basic Editor。這提供了一個完整的編程環境,您可以在其中編寫自己的功能。

VB是一種簡單的編程語言,谷歌擁有您需要的所有指南。

在那裏,您可以編寫一個像MySum()這樣的函數,並以自己編寫的清晰方式將它做任何您真正需要的數據。

我把這個關掉了谷歌,它看起來像一個很好的指南來設置這一切。 http://office.microsoft.com/en-us/excel/HA011117011033.aspx

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))} 
+0

這與我的原始公式 – user40432 2008-11-27 01:36:55

+0

幾乎相同 - 但我只做了一次減法 – 2008-11-27 17:04:59

0

這是怎麼回事?

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

編輯:

Woops - 錯過了拋出底片的一部分。那這個呢?不知道是它的速度更快...

=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)) 
1

更計算效率(尤其是重新計算有效的)的方法是使用輔助列代替數組公式:

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

複製這兩個向下5行

E1:=SUM(D1:D5)

Excel將僅重新計算取決於任何更改的值的公式,而不是每次更改任何單個數字時都必須計算數組公式所包含的所有虛擬列。即使你改變了所有的數字,它的計算也少了。