sumproduct函數(shù)在多條件統(tǒng)計中具有王者之風(fēng),是一個Excel高手必備的技能之一。
基本用法 = sumproduct(array1, array2, array3, ...)它可以支持最高30個參數(shù)。但必須要注意,這里每個參數(shù)都必須為數(shù)值型,連邏輯型都不行。所以任何以下式子得到的結(jié)果都是0: = sumproduct(A1:A100, B1:B100<>"a") ' 錯誤用法,結(jié)果總是返回0!解決方法之一是通過顯性或隱性的轉(zhuǎn)換將邏輯值轉(zhuǎn)為數(shù)值型:
= sumproduct(A1:A100, N(B1:B100<>"a")) ' 顯性轉(zhuǎn)換 = sumproduct((A1:A100)*(B1:B100<>"a"))使用連乘的技術(shù)原理可參考Excel區(qū)域計算的原理。它比上面的多參數(shù)形式運(yùn)算速度要稍微慢一些,但也有以下兩個好處:
·連乘的表達(dá)式不需要轉(zhuǎn)換邏輯表達(dá)式,寫法更為簡單。 = sumproduct((A1:A100)*((B1:B100="a")+(B1:B100="b")))即sumproduct可以實(shí)現(xiàn)嵌套的條件求和(包括and和or),而sumifs只能實(shí)現(xiàn)并列條件求和(即只能是and)。其實(shí)sumproduct的適用范圍要寬的多,比如以下條件求和,sumifs都無法實(shí)現(xiàn):
= sumproduct((A1:A100)*((C1:C100+D1:D100)>0))
= sumproduct((A1:A100)*(C1:C100<D1:D100))
= sumproduct((A1:A100)*(LOG(C1:C100,2))) = sumproduct((A1:A100)*((B1:B100="a")+(B1:B100="b"))){= sum((A1:A100)*((B1:B100="a")+(B1:B100="b")))}但數(shù)組公式難以被理解,輸入速度慢(無法拖動等等),并且一般情況下數(shù)組公式比普通公式效率要低,所以能用普通函數(shù)實(shí)現(xiàn)的功能,建議直接使用普通函數(shù)。
加權(quán)平均值
= sumproduct(value*weight) / sum(weight)公式可包含數(shù)據(jù) = sumproduct((A1:A4)*{1;2;3;4}) 注意下面公式得到的結(jié)果是一樣的,但運(yùn)算效率要低很多。從Excel區(qū)域計算的原理知道,下面的式子中sumproduct的參數(shù)被展開成一個4×4的方塊,所以運(yùn)算速度要慢一個級別(線性 vs 平方): = sumproduct((A1:A4)*{1,2,3,4}) 這里區(qū)別在于”;”號表示換行,而”,”號表示下一列,所以{1;2;3;4}是一個列向量,而{1, 2, 3, 4}是一個行向量。我們也可以將其結(jié)合,{1,2,3,4;5,6,7,8;9,10,11,12;}是一個3×4的矩陣。 |
|