excel学习库

excel表格_excel函数公式大全_execl从入门到精通

穿越时间·Excel升级之路连载6:神级函数SUMPRODUCT的惊鸿一瞥

跟我一起,穿越时间!

回顾一下,经过前面5期的连载,我们对Excel中的数组已经有了全面的认识,知识储备已足够支持我们再上一个台阶,如果没有看过前面几期的连载,建议先点击头像或者链接跳转:

在连载5的后半部分,我们研究了SUM函数和数组的结合,清楚了区域数组在Excel中的应用,但实际上来说,SUM和数组结合的用法并不是太普遍,毕竟按Ctrl+Shift+Enter键才能够执行数组运算。有没有更加简单高效的函数呢?答案是肯定的。这就是Excel中既能求积、又能求和、还能判断的神级函数——SUMPRODUCT

今天,我们走到Excel升级之路连载6:神级函数SUMPRODUCT的惊鸿一瞥

一、SUMPRODUCT函数初体验

话说天下武林纷争不断,爱恨情仇轮番上演,几经波折之后,

(本系列连载中的销售情境数据仅为演示学习需要而虚构)

在下图记录中可以看到清月派周婉悦和玉玲师太有四次开单销售文创纪念品的记录,现在想求一下销售总额,如何计算?如何一步到位计算出结果?

这个问题很简单,每一行的单价乘以数量然后再求和即可。

13*1000+9*1000+6*800+6*1000=32800

写成公式就是:=P2*Q2+P3*Q3+P4*Q4+P5*Q5

上述算法停留在原始社会的水平,虽然可以解决问题,但是有点麻烦。

=SUM(A1:E1*{1,2,3,4,5}=25)

=SUM(P2:P5*Q2:Q5)

复习一下计算过程,

原式=sum({13;9;6;6;}*{1000;1000;800;1000})

=sum({13*1000;9*1000;6*800;6*1000})

=sum({13000;9000;4800;6000})

=13000+9000+4800+6000

=32800

其计算过程就是SUM函数的单参数下的数组运算,计算数组P2:P5*Q2:Q5,相当于求出了每一行数量乘以单价的销售额,他们构成了一个新数组,而sum函数最终求和时相当于把新数组中的每一项相加,结果就是总的销售额。(如果不能理解请看前面的连载)

但是现在,我们如果采用SUMPRODUCT函数,一键即可得出结果:

=SUMPRODUCT(P2:P5*Q2:Q5)

或者

=SUMPRODUCT(P2:P5,Q2:Q5)

就是这么高效,具体SUMPRODUCT是怎样实现的?为什么上面两种写法都可以?

我们继续往下看。

二、SUMPRODUCT函数再体验

SUMPRODUCT函数可以返回相应的数组或区域乘积的和,其格式为:

=SUMPRODUCT (array1, [array2], [array3], ...)

其中array1为其相应元素需要进行相乘并求和的第一个数组参数。

先求积再求和

不同参数间先相乘,有了乘积后求和。

如果我们从字面上看SUMPRODUCT中sum是求和,product是求积,SUMPRODUCT就是对积进行求和。

举个例子:

现在有两个区域数组,A1:E1和A3:E3,有三个公式:

=SUM(A1:E1*A3:E3)

=SUMPRODUCT(A1:E1,A3:E3)

=SUMPRODUCT(A1:E1*A3:E3)

他们都结果都是130

=SUM(A1:E1*A3:E3)

=SUMPRODUCT(A1:E1,A3:E3)

数组A1:E1和数组A3:E3分别是SUMPRODUCT函数的两个参数

原式=SUMPRODUCT({1*6,2*7,3*8,4*9,5*10})=SUMPRODUCT({6,14,24,36,50})=130

{1*6,2*7,3*8,4*9,5*10}的产生是由SUMPRODUCT函数造成的。

=SUMPRODUCT(A1:E1*A3:E3)

A1:E1和A3:E3之间使用的是*号,而不是逗号

A1:E1*A3:E3是SUMPRODUCT函数的一个参数

原式=SUMPRODUCT({1*6,2*7,3*8,4*9,5*10})=SUMPRODUCT({6,14,24,36,50})=130

{1*6,2*7,3*8,4*9,5*10}的产生是由*乘号造成的。

看到这里,也许有人就要有疑问了,为什么要分多参数写法和单参数写法?

是不是可以随便写?

继续了解SUMPRODUCT函数的注意事项后,也许你就会有答案。

三、SUMPRODUCT函数注意事项

1、SUMPRODUCT对常量数组的运算举例

我们来看几个简单的公式:

=SUMPRODUCT(5)

单一参数

=SUMPRODUCT({5})

单一参数

=SUMPRODUCT({5,6})

单一参数

=SUMPRODUCT(5,6)

两个参数

=SUMPRODUCT({1,2,3,4,5},{6,7,8,9,10})

两个参数

数组求积遵循数组的运算规律。

2、SUMPRODUCT中的运算符

默认操作是乘法,但也可以执行加减除运算。

这时需将分隔数组参数的逗号替换为所需的算术运算符 (*、/、+、-)执行所有操作后,结果将像往常一样进行求和。

上面这两句话是什么意思?

如果需要SUMPRODUCT函数中执行其他运算,那这种运算必须在一个参数内完成。

(2)使用算术运算符,需要考虑将数组参数括在括号中,并使用括号对数组参数进行分组以控制算术运算的顺序。这是比较复杂的自定义运算。

3、SUMPRODUCT函数要求各个数组必须具有相同的维数,否则SUMPRODUCT会返回错误值#VALUE!

这个是比较好理解的,不知道你注意到了没有,无论是第一部分的实例,还是第二部分的例子,SUMPRODUCT多个参数中的数组都是规格尺寸一样的。

因此只需要遵循数组的对应运算规则,不会产生#N/A的情况,这在连载5数组的运算中详细讨论过,因此SUMPRODUCT简化了涉及的数组运算的难度。

举个例子:

尺寸不同的情况:

=SUM(A8:E8*A10:C10) =SUM({1,2,3,4,5}*{6,7,8}) 数组运算会出错#N/A

=SUMPRODUCT(A8:E8,A10:C10) =SUMPRODUCT({1,2,3,4,5},{6,7,8}) 因数组尺寸不同,也会出错#VALUE!

=SUMPRODUCT(A8:E8*A10:C10) =SUMPRODUCT({1,2,3,4,5}*{6,7,8}) 出错#N/A

但是,

尺寸相同的情况:

=SUM(A8:E8*A10:E10) =SUM({1,2,3,4,5}*{6,7,8,"穿越时间",TRUE}) 报错#VALUE!

=SUMPRODUCT(A8:E8,A10:E10) =SUMPRODUCT({1,2,3,4,5},{6,7,8,"穿越时间",TRUE}) 结果为44

=SUMPRODUCT(A8:E8*A10:E10) =SUMPRODUCT({1,2,3,4,5}*{6,7,8,"穿越时间",TRUE})会返回错误#VALUE!

中间那种写法不出错,A10:E10中有文本型和逻辑值呢,为什么还不出错?这就是SUMPRODUCT的下一个注意点。

条目注意是针对单个参数计算完成所生成的数组中的条目。

非数值数包括逻辑值、文本字符串,SUMPRODUCT将其视为0,返回0

非数值数不包括错误值,如果数组元素中包含错误值,SUMPRODUCT返回错误值。

上面的多参数公式:

=SUMPRODUCT(A8:E8,A10:E10) =SUMPRODUCT({1,2,3,4,5},{6,7,8,"穿越时间",TRUE}) 结果为44

"穿越时间",TRUE00

上面的单参数公式:

=SUMPRODUCT(A8:E8*A10:E10) =SUMPRODUCT({1,2,3,4,5}*{6,7,8,"穿越时间",TRUE})会返回错误#VALUE!

4*"穿越时间",5* TRUE

注意运算中逻辑型值被视为了1(TRUE被视为1,FLASE被视为0);文本型值无法计算产生错误#VALUE,进而错误值#VALUE无法参与求和,且不被忽略,因此最终结果就是#VALUE

=SUM(A8:E8*A10:E10) =SUM({1,2,3,4,5}*{6,7,8,"穿越时间",TRUE}) 报错#VALUE!的原因和上述一致。

看到这里,我们可以体会到SUMPRODUCT函数的过人之处了。

你是否还有疑问,上面的计算中,逻辑值TRUE有时被视为0,有时又被视为1 ?

注意SUMPRODUCT会将单个参数计算完成时所生成的数组中的条目里的逻辑值视为0

例如=SUMPRODUCT({TRUE,TRUE})= SUMPRODUCT ({0,0})=0

但是单个参数计算过程中,如果出现逻辑值和数值的运算,则TRUE相当于1,FALSE相当于0

=SUMPRODUCT({TRUE,TRUE}*{TRUE,FALSE})=SUMPRODUCT({TRUE*TRUE,TRUE*FALSE})=SUMPRODUCT({1,0})=1

那文本型数字是什么情况?

SUMPRODUCT会将单个参数计算完成时所生成的数组中的条目里的文本型数据(包括汉字、字母、文本型数字)视为0

=SUMPRODUCT({"穿越时间","Excel","770"})=SUMPRODUCT({0,0,0})=0

但是单个参数计算过程中

如果出现文本型汉字或文本型字母的运算,因其不能运算,最终会导致SUMPRODUCT出错。

=SUMPRODUCT({1,2}*{"穿越时间","Excel"})=SUMPRODUCT({#VALUE!, #VALUE!})结果为#VALUE!

如果出现文本型数字的运算,程序会将其视为数字并继续计算得出数值型结果:

=SUMPRODUCT({1,2}*{"100","200"})=SUMPRODUCT({100,400})=500

以上SUMPRODUCT对单个参数计算完成时所生成的数组中的条目里的逻辑值、文本型数据、空单元格的处理与SUM执行数组运算时对数组或引用的处理是一致的。

为获得最佳性能,SUMPRODUCT不应与完整列引用一同使用。

例如我们很少写=SUMPRODUCT (A:A,B:B)

最后,我们通过实际的例子练习一下,为以后的实际应用打下基础:

注意区分:

= SUMPRODUCT (B1)

=SUMPRODUCT({"穿越时间"})

=SUMPRODUCT(A1:A3*B1:B3)

=SUMPRODUCT(A1:A3,B1:B3)00

=SUMPRODUCT(A1=B1)

=SUMPRODUCT((A1=B1)*1)FALSE*1

=SUMPRODUCT({FALSE})

注意以下两个,*1产生了什么作用使结果不同?(如果不清楚请仔细看前面的连载)

=SUMPRODUCT(B1={"穿越时间","丽云流金"})

=SUMPRODUCT((B1={"穿越时间","丽云流金"})*1)=

好了,以上就是连载6的全部内容,你是否爱上了SUMPRODUCT函数?如果有不理解的可以先看前面的连载打牢基础。

更多精彩,敬请关注,投币赞赏,感谢支持。

(原创连载,个人观点保留,禁止任何未经授权的非本人账号复制文章到其他平台发布)

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接