SUMPRODUCT函數(shù)的含義為在給定的幾組數(shù)組中,將數(shù)組間對應(yīng)的元素相乘,并返回乘積之和。按我的理解就是兩個以上的數(shù)組乘積之和。例如,公式為:=SUMPRODUCT(A2:A4, B2:B4)就相當(dāng)于=A2*B2+A3*B3+A4*B4,兩個區(qū)域用逗號隔開,不過用乘號也是沒有問題的。似乎也只有這個函數(shù)才有這種對應(yīng)元素之間先行捉對計算的功能。 1、條件求和時條件區(qū)域與求和區(qū)域之間可以用逗號,也可以用乘號,因?yàn)闊o論是逗號還是乘號,都是將數(shù)組中對應(yīng)元素相乘,再取乘積之和。但是,條件之間是必須用乘號的,如果用逗號則得到錯誤結(jié)果。例如,公式為:=SUMPRODUCT((A2:A9=A3)*(B2:B9=B3)*C2:C9)也可以寫成:=SUMPRODUCT((A2:A9=A3)*(B2:B9=B3), C2:C9),如果寫成:=SUMPRODUCT((A2:A9=A3), (B2:B9=B3), C2:C9),則結(jié)果錯誤,為什么呢? 首先我們把上面的問題簡化,假定每個數(shù)組只有一個值,我們看看計算結(jié)果,即: SUMPRODUCT({TRUE}*{TRUE}*{8})=8 SUMPRODUCT({TRUE}*{TRUE}, {8})=8 SUMPRODUCT({TRUE}, {TRUE}, {8})=0 注意,上面的公式中大括號表示一個數(shù)組,SUMPRODUCT函數(shù)處理每一個參數(shù)數(shù)組的的元素時,其中的非數(shù)值型值(文本、邏輯)是作為0來處理的,所以用逗號分隔時結(jié)果為0,如果用乘號,{TRUE}*{TRUE}作為一個表達(dá)式先行計算,其計算結(jié)果是1(按true=1,false=0計算)。 2、條件求和時,如果求和區(qū)域出現(xiàn)文本型值,則必須用逗號,用乘號則報錯,我們看一下計算結(jié)果,即: SUMPRODUCT({TRUE;FALSE}*{TRUE;TRUE}, {8;”song"})=8 SUMPRODUCT({TRUE;FALSE}*{TRUE;TRUE}*{8;”song"})=#VALUE! 同上,因?yàn)閿?shù)組區(qū)域中的文本信息是作為0來處理的,所以第一個公式得到正確的結(jié)果。第二個公式因?yàn)橐扔嬎惚磉_(dá)式的值,所以碰到了文本作為乘數(shù)的情況,所以結(jié)果會報錯。 3、條件求和時,如果求和區(qū)域不是一列而是一個矩形區(qū)域時,則必須用乘號,用逗號會報錯。即 SUMPRODUCT((A2:A9=A3)*(B2:B9=B3)*C2:F9)=正常值 SUMPRODUCT((A2:A9=A3)*(B2:B9=B3), C2:F9)=#VALUE! 對于以上不同的公式寫法,可以用“公式求值”來看看公式的運(yùn)算情況,從而探知為什么會出現(xiàn)這樣的結(jié)果。 綜上所述,SUMPRODUCT函數(shù)各數(shù)組間盡量用逗號隔離,條件求和的標(biāo)準(zhǔn)寫法應(yīng)該是: SUMPRODUCT((條件1)*(條件2)*(條件3)*…*(條件n), 求和區(qū)域) ———————————————— 原文鏈接:https://blog.csdn.net/iamlaosong/article/details/54315876
|
|