sumproduct函數(shù)在多條件統(tǒng)計中具有王者之風(fēng),是一個Excel高手必備的技能之一。
基本用法
sumproduct的正常用法是
= 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")) ' 隱性轉(zhuǎn)換,速度更快,推薦另一個方法是使用連乘:
= sumproduct((A1:A100)*(B1:B100<>"a"))使用連乘的技術(shù)原理可參考Excel區(qū)域計算的原理。它比上面的多參數(shù)形式運(yùn)算速度要稍微慢一些,但也有以下兩個好處:
·連乘的表達(dá)式不需要轉(zhuǎn)換邏輯表達(dá)式,寫法更為簡單。
·連乘可突破最多30個參數(shù)式子的限制。
和sumifs的區(qū)別
office 2007引入了sumifs,可進(jìn)行多條件求和,可以部分實(shí)現(xiàn)sumproduct的功能。但sumproduct有一個功能,sumifs無法做到。比如:
= 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可對不同區(qū)域進(jìn)行預(yù)算
= sumproduct((A1:A100)*(C1:C100<D1:D100))
' sumproduct可對不同區(qū)域進(jìn)行比較
= sumproduct((A1:A100)*(LOG(C1:C100,2)))
' sumproduct可使用excel內(nèi)置函數(shù)其它
數(shù)組公式
sumproduct的所有功能都可以用公式組實(shí)現(xiàn)。比如將sumproduct換成sum,然后按CTRL+SHIFT+ENTER確認(rèn),可得到一模一樣的結(jié)果
= 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)平均值
value和weight分別為值和權(quán)重,那么可以通過以下方法
= sumproduct(value*weight) / sum(weight)公式可包含數(shù)據(jù)
Excel支持直接輸入數(shù)據(jù),所以我們可以使用下面這樣的表達(dá)式:
= 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的矩陣。