提起单条件求和,我们会想到sumif,而提起多条件求和计数,sumproduct是我们最常用到的。对于大部分同学只是会套用公式,而我们今天要揭开它的运算原理。
例:如下图所示,要求在C10单元格根据“产品”和“型号”两个条件,统计销售总数量。
公式:
=SUMPRODUCT((A3:A7=A10)*(B3:B7=B10)*C3:C7)
公式解析:
1 首先我们先抛开sumproduct函数,看看括号内是怎么运算的。
(A3:A7=A10) 是一组数和一个数比较,昨天已介绍,如果一组数分别和一个数进行运算,属数组运算,会返回多个运算后的结果。即:
{TRUE;FALSE;TRUE;FALSE;TRUE}
TRUE说明二者相等,FALSE说明不相等
同理(B3:B7=B10)也会返回一组对比的结果
{TRUE;FALSE;FALSE;FALSE;TRUE}
如果两组数方向是一样的(同是一行或一列),两组数会一一对应的计算。
而TRUE在进行四则运算时会当作1,FALSE当作0来运算,即
TRUE*TRUE=1*1=1 TRUE*FALSE=1*0=0 FALSE*FALSE=0*0=0
{TRUE;FALSE;TRUE;FALSE;TRUE} *{TRUE;FALSE;FALSE;FALSE;TRUE}
的结果是:{1;0;0;0;1}
就本例,也就是说,如果两个条件同时满足,两组相乘的结果是1,如果无法同时满足两个条件,计算的结果就是0.
继续,当{1;0;0;0;1}*C3:C7 时,同样也会一对一进行相乘。结果变成
{2;0;0;0;8}
由此,我们用两个对比条件和求和区域相乘,符合条件的数量保留,不符合的变成了0,剩下的就是对符合条件的数进行求和。
2 对一组求和本是SUM函数的专享,但由于本公式是数组运算,所以我们需要按ctrl+shift+enter三键输入该公式才能得到正确的结果。如果不想用数组形式输入,可以用sumproduct函数来完成本例最后的求和。
Sumproduct函数是矩阵求和,说白了就是一组数和另一组或几组相乘,然后再求和。如
=SUMPRODUCT({1;2;3},{10;20;30})运算的过程是
=1*10+2*20+3*30 结果为 140
而如果sumproduct的参数只有一组时,就只是求和了。如
=SUMPRODUCT({1;2;3})
=1+2+3 结果是6
本例中,我们用sumproduct({2;0;0;0;8})即可完成该组数的相加,
=2+0+0+0+8
总结:由上述分析,我们可以看出sumproduct函数其实只是完成求和工作而已,和sum函数不同的是:它可以直接求和,而sum参数数组运算时,需要用数组形式输入。