SUMPRODUCT
这是一个与SUM函数非常相似的函数。大多数情况这两个函数是可以互换使用的。
SUMPRODUCT是在给定的几组数组中,将数组间对应的元素相乘,并返回乘积之和。
语法
SUMPRODUCT(array1,array2,array3, ...)
Array1, array2, array3, ... 为 2 至 30 个数组,其相应元素需要进行相乘并求和。
数组参数必须具有相同的维数,否则,函数 SUMPRODUCT 将返回错误值 #VALUE!。
函数 SUMPRODUCT 将非数值型的数组元素作为 0 处理。
对参数有几点说明:
1、帮助中说2-30个数组,当然也可以是一个数组,如果是一个数组,那么就是对这个数组的求和。(类似SUM)
2、参数可以是直接引用的二维数组以及内存数组;不可以直接引用三维数组(sum可以)以及indirect,offset产生的三维引
3、参数中如含有错误值,则返回对应的错误值。
下面我就举几个例子对上面的观点进一步说明。A
AA1
例1:BB2 39#NAME?CC3
说明:最基础的返回两个引用数组乘积的和DD4
例1-1:EE5 48#NAME?
说明:参数中非数值型的数组元素都作为0处理了,包括TURE
例1-2:
#VALUE!#NAME?
说明:参数维数不一致所以返回错误值#VALUE!。
例1-3:
#N/A#NAME?
说明:参数中含有错误值#N/A,所以返回#N/A。
例2:
39#NAME?data1=OFFSET(sumproduct!$I$20,,,5)
说明:返回两个内存数组的乘积的和data2=OFFSET(data1,,1,)
例3:
11#NAME?
说明:支持区域交叉,注意中间的空格以及参数两边的括号不可以省略。
例4:
#VALUE!#NAME?
说明:不支持联合区域,可以通过增加参数,或者分开相加的方式实现。
例5:
0#NAME?
#REF!#NAME?
0#NAME?
说明:不支持indirect产生的三维的引用,解决方法在后面说明。
例6:
8#NAME?
说明:支持公式产生的内存数组,这个例子也是目前大家最喜欢用的一种方式。
了解了SUMPRODUCT的这些特点,现在我们来看看它的一些应用。
一、把其作为一种查函数来用。
a.单条件判断
3#NAME?
b.多条件判断
1#NAME?
上面这两个公式中间我一个用了乘号,一个用了逗号。可能有些朋友要说了,这里的乘号和逗号都可以用,可以互换。
sumproduct函数的用法简介这里是不可以的,不信你换换看(保持公式其他不变的前提下)。那是为什么呢?那么我们就对公式进行分解。
=SUMPRODUCT((H20:H24="CC")*I20:I24)的“*”前后两段分别选中按F9分解。那么公式就变成:
=SUMPRODUCT({FALSE;FALSE;TRUE;FALSE;FALSE}*{1;2;3;4;5})
我想大家都知道TRUE,FALSE在进行加,减,乘,除,乘方等算术计算时TRUE相当于1,FALSE相当于0
那么上面的公式就相当于=SUMPRODUCT({0;0;1;0;0}*{1;2;3;4;5})即=SUMPRODUCT({0;0;3;0;0})
前面也讲过了就有一个参数的时候相当于求和。那么结果就是我们想要的“3”
那么这里的“*”为什么不能换成“,”呢。我们看语法的第三条。如果用了逗号那么第一个参数就是由TRUE,FALSE
组成的数组,非数值型。那么函数就将其全转换成0,那么结果肯定就是0。
b例子我就不重复罗嗦了,道理和上面一样。这里为什么不能用“*”我想大家也应该明白了吧。(我抽口烟先*_*)
这里我再唠叨一点就是各个参数的维数一定要相同,这也是初学者容易忽视的。
二、对满足条件的数进行求和
例如对非“AA”“BB”“B”下面的数进行求和
7#NAME?
道理同上不再多讲,再次强调参数间的维数一定要相同。
三、参数如何使用由indirect,或offset产成的三维的引用。
上面的例5的用法,我们如何能正确使用呢?我们在使用indirect或offset的时候往往会用row或column对区域的引用。
而row和column产生的数组,这样它又对你的引用增加了一维,造成SUMPRODUCT函数不能进行使用。
解决办法降低其维数,达到我们引用的目的如下:
31#NAME?
#REF!#NAME?
150#NAME?
我们通过N,MIN,MAX,SMALL,LARGE等这些函数返回结果为数值的特点,就可以把这些数组转换成数值。从而降低维数。当然公式不需要像上面那样负责,之所以用那么多函数是要说明这些函数都可以达到我们的目的。
四、参数使用由indirect函数产生的三维以上的引用(对数组不是很熟悉的朋友可以先不考虑)
上面我们通过一些办法达到了三维的引用,但是总是觉得意义不是很大。不能充分实现我们实际应用中的需求
例如我们想用sumproduct函数进行多表引用时,往往想利用每个表的两列以上。这样我们用indirect函数引用就会超过三维。比如我们想要知道1-12表中为“b”的数量和。
#VALUE!#NAME?
显然上面的公式是达不到我们的目的的。那么用N和T(元素为文本时用T转换)转换一下呢?
0#NAME?
也不正确!我们通过分段F9大法发现公式只是取了第一行数。也就是跟indirect参数的维数有关了。(这里更想是介绍indire 再设想一下我们想要的效果,我们想要得到的更像是两个矩阵的乘积的和。(有点眉目了,容我再来一支烟*_*)
那么我们更象把各表A列拼在一起形成数组1,B列拼在一起形成数组2。有了这两个数组离我们的结果也就不远了。
于是经过一番思想斗争我写出下面公式:
222#NAME?
上面公式用了row与column进行了区域的扩充。注意column和row的位置,因为它们分别产生横向数组和纵向数组。
以上是鄙人对SUMPRODUCT函数一点看法,希望对您学习此函数能够有一定帮助,如有不妥之处还望指正。
Office精英俱乐部-Knifefox
####
的求和。(类似SUM)
及indirect,offset产生的三维引用。
B C D E
24TRUE2
3213
1j504
2112#N/A
412FALSE7
逗号都可以用,可以互换。
就对公式进行分解。
参数就是由TRUE,FALSE
吧。(我抽口烟先*_*)
column对区域的引用。
转换成数值。从而降低维数。
的需求。
direct函数引用就会超过三维。
关了。(这里更想是介绍indirect的用法了*_*)支烟*_*)
们的结果也就不远了。
横向数组和纵向数组。
之处还望指正。
精英俱乐部-Knifefox
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论