excelperfect
有一組數(shù)據(jù),我們想要求出剔除某些數(shù)據(jù)后余下的數(shù)據(jù)之和,如下圖1所示,要求數(shù)據(jù)區(qū)域中除代碼FA、PD、SS之外的分?jǐn)?shù)之和。
圖1
可以使用公式:
=SUM(B2:I2)-(SUMIF(B1:I1,'FA',B2:I2)+SUMIF(B1:I1,'PD',B2:I2)+SUMIF(B1:I1,'SS',B2:I2))
然而,如果數(shù)據(jù)很多,這個(gè)公式會(huì)很長(zhǎng),很不簡(jiǎn)潔。此時(shí),我們可以使用SUMPRODUCT函數(shù)的公式:
=SUM(B2:I2)-SUMPRODUCT(((B1:I1)=({'FA';'PD';'SS'}))*(B2:I2))
下面對(duì)這個(gè)公式的運(yùn)行原理進(jìn)行解釋。公式的主要部分:
SUMPRODUCT(((B1:I1)=({'FA';'PD';'SS'}))*(B2:I2))
包含兩部分:
((B1:I1)=({'FA';'PD';'SS'}))
和
(B2:I2)
其中,(B2:I2)被轉(zhuǎn)換為由單元格區(qū)域中的數(shù)值組成的單行數(shù)組:{10,10,10,10,10,10,10,10}。這很好理解。
現(xiàn)在主要看看:
((B1:I1)=({'FA';'PD';'SS'}))
Excel將使用單元格區(qū)域B1:I1中的每個(gè)值依次與“FA”、“PD”、“SS”進(jìn)行比較,生成一個(gè)3行8列的數(shù)組:
{FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE;FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,FALSE;FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE}
其第1行是B1:I1中的每個(gè)值與“FA”比較的結(jié)果,第2行是與“PD”比較的結(jié)果,第3行是與“SS”比較的結(jié)果。如下圖2所示。
圖2
將上面生成的兩個(gè)中間數(shù)組相乘:
((B1:I1)=({'FA';'PD';'SS'}))*(B2:I2)
即:
{FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE;FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,FALSE;FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE}*{10,10,10,10,10,10,10,10}
第一個(gè)數(shù)組的每1行中的每個(gè)元素分別與第2個(gè)數(shù)組中對(duì)應(yīng)的元素相乘,得到:
{0,10,0,0,0,0,0,0;0,0,0,0,10,0,0,0;0,0,0,0,0,0,10,0}
傳遞給SUMPRODUCT函數(shù):
SUMPRODUCT(((B1:I1)=({'FA';'PD';'SS'}))*(B2:I2))
即:
SUMPRODUCT({0,10,0,0,0,0,0,0;0,0,0,0,10,0,0,0;0,0,0,0,0,0,10,0})
得到:
30
從而:
=SUM(B2:I2)-(SUMIF(B1:I1,'FA',B2:I2)+SUMIF(B1:I1,'PD',B2:I2)+SUMIF(B1:I1,'SS',B2:I2))
=80-30
=50
聯(lián)系客服