2012-04-02 77 views
1

我們正在尋找原始?爲SUMIFS源代碼中使用了Excel工作表(適用於2003年和2007年。這是爲什麼:SUMIFS源代碼爲Excel 2003和能夠計算列

  • 2003所行的支持SUMIFS方法
  • 當我們確實有SUMIFS我們不能利用公式「圍繞」列(如YEAR())

例如,我們要計算匹配單元格A1的日期在範圍L的日期值的年份值的答案:●現在這行不通的,因爲我們不能使用年(L:L),因此我們需要製作另一列M:M,其年份值爲L:L

因此,我們所需要的源能夠升級的代碼進一步

= SUMIFS(答覆; L:升; 「=」 & YEAR(A1))< =此工程

= SUMIFS(解答; YEAR(L:L); 「=」 & YEAR(A1))< =此犯規

非常感謝

隨着和借鑑這些問題: Replacing SUMIFS in Excel 2003 VBA code for SUMIFS?

回答

2

我懷疑你會發現原來的代碼,這是我想象的,C++和Excel內部的一部分。如果這是正確的,那麼即使微軟給你提供了它也沒有多大幫助!

一般情況下,我建議不要使用=SUMIF()=SUMIFS()和一個字符串來定義測試條件的其他功能:二話不說,我擔心他們會很慢,因爲我最好的猜測是在內部他們爲每個值構建一個評估字符串。至少在XL2007中(我現在所有的都可用),事實證明這不是真的(見下面的評論)。

我一般比數組函數更快樂。這一點,例如,應在兩個工作的Excel 2003 & 2007:

=SUMPRODUCT(--(YEAR(L:L)=YEAR(A1)),ANSWERS) 

這得到了相同的答案:

{=SUM(IF(YEAR(L:L)=YEAR(A1),ANSWERS,0))} 

在後一種情況下,你輸入公式沒有大括號( { & })並使用Control + Shift + Enter確認它以告訴Excel它是一個數組公式。

在第一個例子中,我們用YEAR(L:L)=YEAR(A1)建立一個布爾結果列表,並使用雙負值將它轉換爲1和0的數組。然後SUMPRODUCT照顧其餘。該版本要求ANSWERSL:L具有相同的尺寸,即它應該是整個列(或者應限制L的範圍)。

第二,Excel將運行L:L中的每個條目。如果其年份與A1相匹配,則將使用相應的ANSWERS值,否則將使用零。這個公式似乎更容忍維度差異,但我仍然要小心。

+1

'sumproduct'不是一個單獨的數組公式(僅作爲一個別名),所以它不需要通過Ctrl + Shift + Enter ...和Excel 2003中的sumproduct和數組公式來確認到正常範圍,而不是整列。 – Aprillion 2012-04-03 09:18:13

+1

+當然,sumproduct和數組公式是** [SLOWER](**)(http://www.xldynamic.com/source/xld.SUMPRODUCT.html)**,它指出sumifs,the開銷必須處理使用它們的每一個細微差別比字符串construcions大得多+他們必須重新計算每個數組的重新計算,sumifs更好地優化重新計算只需要什麼。 – Aprillion 2012-04-03 09:30:23

+0

有趣。現在issumif或sumproduct慢? – 2012-04-03 16:36:06