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