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