课程咨询 加我微信EXCEL880B 试学网址http://v.excel880.com
经常性的在公式中会用到sumproduct(()*())与sumproduct((),())这样两种方法,但是却不是很能理解其中乘号跟逗号的区别,为什么有时候用逗号结果正确,用乘号却是错误?
一般情况下,sumproduct函数中各个参数之间使用逗号或者乘号效果是一样的,但是,有种特殊的情况需要留意,数据源中存在一些特殊数据的时候,可能会无法计算。
在使用乘号的情况之下,sumproduct函数不会自动将文本做0处理,所以F3单元格无法得到正确的结果:300。
我们先来理解一下这个公式;
①判断A2:A8区域的值,是否等于F2单元格,返回TRUE/FALSE;
②判断B2:B8区域的值,是否等于G2单元格,返回TRUE/FALSE;
③然后再通过返回的逻辑值相乘得出结果。
判断A2:A8区域的值与判断B2:B8区域的值,会返回{0;0;1;0;0;0;0},如下图所示。
那么,回到最初的问题,对于数据源有字母、文本之类的特殊内容。为什么各参数之间用乘号是错的,用逗号就能返回正确的结果?
首先,我们来看看sumproduct用乘号的运算过程,
为什么使用乘号得到结果返回#!Value,原因出在sumproduct函数不直接支持逻辑值。因为sumproduct函数是数组运算,所以他的要求比较严格,不至于像其他函数一样,可以将逻辑值做0与1处理,所以他认识的TRUE与FALSE叫做文本。sumproduct函数把X这个值与前面的数值相乘,这样的结果是#!VALUE,而公式中有错误,sumproduct就返回错误。
那么,sumproduct函数中用逗号的运算方式,就有点不一样了,各参数相乘再相加,如公式=sumproduct({0,0,1,0,0,0,0},{100,200,300,400,0,600,700}),是先相乘0*100,0*200,1*300,0*400,0*0,0*600,0*700,再相加0+0+300+0+0+0+0,结果为300,如下图所示。
而用逗号时,sumproduct函数就发挥了其特性, sumproduct函数将非数值型的数组元素作为0处理。这时X变成了0,所以结果是对的。所以使用逗号时,函数的容错能力更强。
本文已取的原作者授权 禁止转载 原文链接为https://www.toutiao.com/item/6736871212137316876/