当前位置:文档之家› Sumproduct函数(解释大全)

Sumproduct函数(解释大全)

Sumproduct函数(解释大全)
Sumproduct函数(解释大全)

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((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

相关主题
文本预览
相关文档 最新文档