加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

SUMPRODUCT函数

(2012-01-05 22:08:38)
标签:

杂谈

分类: excel


含义

  汉语的意思是

  SUM:【数】求和

  PRODUCT:【数】() 20 is the product of 5 and 4.二十是五与四的乘积。

  SUMPRODUCT:组合的汉语意思是:乘积之和

  在给定的几组数组中,将数组间对应的元素相乘,并返回乘积之和。

语法

  SUMPRODUCTarray1,array2,array3, ...

  Array1,array2,array3, ... 2 30 个数组,其相应元素需要进行相乘并求和。

说明

  · 数组参数必须具有相同的维数,否则,函数 SUMPRODUCT 将返回错误值 #VALUE!

· 函数 SUMPRODUCT 将非数值型的数组元素作为 0 处理。

示例

  如果将示例复制到空白工作表中,可能会更易于理解该示例。

  

B

C

D

E

1

Array1

Array1

Array2

Array2

2

3

4

2

7

3

8

6

6

7

4

1

9

5

3

 

公式

说明(结果)

=SUMPRODUCT(B2:C4*D2:E4)

两个数组的所有元素对应相乘,然后把乘积相加,即3*2+4*7+8*6+6*7+1*5+9*3(156)

 数学函数SUMPRODUCT应用实例

  一、基本功能

  1.函数SUMPRODUCT的功能返回相应的区域或数组乘积的和。

  2.基本格式SUMPRODUCT(数据1,数据2……,数据303.示例数据表A B C D E列数据1数据2数据3数据4数据52 3 4 12 105 5 6 5 209 7 8 #N/A 307 2 7 9 KL1 6 2 8 2

  基本计算

  区域计算要求:计算ABC三列对应数据乘积的和。公式:=SUMPRODUCT(A2:A6,B2:B6,C2:C6)计算方式:=A2*B2*C2+A3*B3*C3+A4*B4*C4+A5*B5*C5+A6*B6*C6即三个区域A2:A6,B2:B6,C2:C6同行数据积的和。返回值788

  数组计算要求:把上面数据表中的三个区域A2:A6,B2:B6,C2:C6数据按一个区域一个数组,计算对应数组积的和。把A2:A6,B2:B6,C2:C6分别作为一个数组,A2:A6表示为数组-{2;5;9;7;1}B2:B6表示为数组-{3;5;7;2;6}C2:C6表示为数组-{4;6;8;7;2}公式:

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

  =788

  注意:数组数据用大括号{}括起来。行数据之间用分号""分隔,如果是同一行的数据,用逗号","分隔。

  可能出现的错误

  编辑公式时,引用的数据区域大小不一致导致计算错误,返回值为#VALUE!。示例:在上面的数据表中,计算A列与B列数据区域积的和。公式:

  =SUMPRODUCT(A2:A6,B2:B5)

  或

  =SUMPRODUCT(A2:A6,B2:B8)

  都会返回错误值#VALUE!。所以在用SUMPRODUCT函数时,引用的数据区域大小要一致。

  数据区域中有错误值时,计算出现错误值。示例:在上面的数据表中,计算数据区域A2A6D2D6对应积的和。公式:

  =SUMPRODUCT(A2:A6,D2:D6)

  因为D2D6中有错误值#N/A,所以公式返回值为错误值#N/A

  数据区域引用不能整列引用。示例:计算上面数据表中A2A6B2B6区域对应数据积的和,正确公式为=SUMPRODUCT(A2:A6,B2:B6)则返回正确的计算值94。如果用公式

  =SUMPRODUCT(A:A,B:B)

  则返回错误值#NUM!。

  数据区域有文本,计算中系统默认文本值为0。示例:在上面数据表中,计算A2A6E2E6区域中对应数据积的和。公式

  =SUMPRODUCT(A2:A6,E2:E6)

  返回值是392,其中E5是文本KL,则A5*E5=0

  二、用于多条件计数用数学函数SUMOPRODUCT计算符合2个及以上条件的数据个数

  数据表如下数据表所示:

  

A

B

C

1

姓名

性别

职称

2

A

中一

3

B

中二

4

C

中一

5

D

中一

6

E

中一

7

F

中二

8

G

中二

9

H

中一

10

I

中一

11

J

中一

 统计表E F G列中一 中二男女要求:统计上面数据表中男、女性中分别是中一、中二的人数。如下图片,A1C11数据区域,在E1G3区域统计男、女中中一和中二的人数是多少。

  

计算结果

公式在数据统计区域中的F2单元格编辑如下公式:

  =SUMPRODUCT(($B$2:$B$11=$E2)*($C$2:$C$11=F$1))

  向下复制到F3,向右复制到G3

  公式分解及分析

  条件1——$B$2:$B$11=$E2在计算过程中,条件1是一个数组,返回多值,写成公式如下:=$B$2:$B$11=$E2具体操作:选中10个连续的单元格,输入上述公式后,按Ctrl+Shift+回车键确认,返回10个逻辑判断值——TRUEFALSEFALSETRUEFALSETRUEFALSETRUETRUEFALSE。这10个逻辑判断值构成一个新的由TRUEFALSE组成的数组1

  条件2——$C$2:$C$11=F$1与条件1相同,是一个数组,返回多值,写成公式如下:=$C$2:$C$11=F$1具体操作:同样的方法,选中对应的10连续单元格,输入上述公式,按Ctrl+Shift+回车键确认,返回10个逻辑判断值——TRUEFALSETRUETRUETRUEFALSE FALSETRUE TRUETRUE。这10个逻辑判断值构成另一个新的由TRUEFALSE组成的数组2

  ($B$2:$B$11=$E2)*($C$2:$C$11=F$1)由新构成的数组1乘以数组2,即:

  =($B$2:$B$11=$E2)*($C$2:$C$11=F$1)

  ={数组1*数组2}

  ={ TRUEFALSEFALSETRUEFALSETRUEFALSETRUETRUEFALSE }*{ TRUEFALSETRUETRUETRUEFALSE FALSETRUE TRUETRUE }

  ={TRUE*TRUE;FALSE*FALSE;FALSE*TRUE;TRUE*TRUE;FALSE*TRUE;TRUE*FALSE; FALSE*FALSE;TRUE*TRUE;TRUE*TRUE; FALSE*TRUE}

  ={1;0;0;1;0;0;0;1;1;0}

  其中,逻辑值TRU***LSE参与计算时:

  TRUE=1FALSE=0TRUE*TRUE=1TRUE*FALSE=FALSE*TRUE=0FALSE*FALSE=0

  因此{数组1*数组2}={1;0;0;1;0;0;0;1;1;0}10构成了一个新的数组3

  =SUMPRODUCT(($B$2:$B$11=$E2)*($C$2:$C$11=F$1))

  函数SUMPRODUCT对新的数组3中的所有数据求和。即:

  =SUMPRODUCT(($B$2:$B$11=$E2)*($C$2:$C$11=F$1))=SUMPRODUCT({数组1*数组2})

  =SUMPRODUCT({数组3})

  =SUMPRODUCT({1;0;0;1;0;0;0;1;1;0})

  =4

  这里需要说明的是,公式编辑按照函数SUMPRODUCT的一般格式,可以编辑如下等效的公式:

  =SUMPRODUCT(($B$2:$B$11=$E2)*1($C$2:$C$11=F$1)*1)

  函数SUMPRODUCT的作用是对数组($B$2:$B$11=$E2)与数组($C$2:$C$11=F$1))计算其乘积的和,即:

  =SUMPRODUCT(($B$2:$B$11=$E2)*1($C$2:$C$11=F$1)*1)

  =SUMPRODUCT({ TRUEFALSEFALSETRUEFALSETRUEFALSETRUETRUEFALSE }*1{ TRUEFALSETRUETRUETRUEFALSE FALSETRUE TRUETRUE }*1)

  =SUMPRODUCT({1;0;0;1;0;1;0;1;1;0},{1;0;1;1;1;0;0;1;1;1})

  =SUMPRODUCT({1*1;0*0;0*1;1*1;0*1;1*0;0*0;1*1;1*1,0*1})

  =SUMPRODUCT({1;0;0;1;0;0;0;1;1,0})

  =4

  注意:TRUE*1=1FALSE*1=1*FALSE=0TRUE*0=0*TRUE=0 。数组中用分号分隔,表示数组是一列数组,分号相当于换行。两个数组相乘是同一行的对应两个数相乘。

  三、用于多条件求和对于计算符合某一个条件的数据求和,可以用SUMIF函数来解决。如果要计算符合2个以上条件的数据求和,用SUMIF函数就不能够完成了。这就可以用函数SUMPRODUCT

  用函数SUMPRODUCT计算符合多条件的数据和,其基本格式是:SUMPRODUCT(条件1*条件2*……,求和数据区域)

  数据表

  

A

B

C

D

1

姓名

性别

职称

课时

2

A

中一

15

3

B

中二

16

4

C

中一

14

5

D

中一

13

6

E

中一

18

7

F

中二

15

8

G

中二

16

9

H

中一

14

10

I

中一

17

11

J

中一

18

 要求:计算男、女分别是中一或中二的总课时数。

  统计表F G H 中一 中二男女在G2中编辑公式

  =SUMPRODUCT(($B$2:$B$11=$F2)*($C$2:$C$11=G$1),$D$2:$D$11)

  回车确认后向下向右复制公式到H3单元格。

  公式释义:性别区域$B$2:$B$11中满足条件男和职称区域$C$2:$C$11中满足条件中一的数据,通过判断计算后由10组成一个新的数据区域,这个新的数据区域再和课时区域$D$2:$D$11中的对应数据相乘后求和。

  公式对比:到此,对函数SUMPRODUCT用来计数和求和,试作一对比

  计数公式

  =SUMPRODUCT(($B$2:$B$11=$E2)*($C$2:$C$11=F$1))

  求和公式

  =SUMPRODUCT(($B$2:$B$11=$F2)*($C$2:$C$11=G$1),$D$2:$D$11)

  不难看出,求和公式在原来的计数公式中,在相同判断条件下,增加了一个求和的数据区域。也就是说,用函数SUMPRODUCT求和,函数需要的参数一个是进行判断的条件,另一个是用来求和的数据区域。

  四、用于排名次如下A列数据:A B列数据 名次56658965567890526090需要排出区域A2A1110个数据的名次。在B2中编辑公式:

  =SUMPRODUCT((A2<$A$2:$A$11)*1)+1

  向下复制到单元格B11

  公式释义:用A2$A$2:$A$11(用绝对引用$保证公式在向下复制时整个数据区域不发生变化)中进行比较,A2<$A$2:$A$11成立时,则返回TRUE;如果A2<$A$2:$A$11不成立就返回FALSE。所以数组公式=A2<$A$2:$A$11返回一个由TRUEFALSE构成的逻辑数组。把数组公式=A2<$A$2:$A$11构成的逻辑数组乘1,得到一个由01构成的新数组。SUMPRODUCT再对由01构成的新数组求和,表示在数据区域$A$2:$A$11中比A2大的数据个数。所以A2在数据区域$A$2:$A$11内排列的位次应该是比A2大的数据个数+1,即公式=数据区域$A$2:$A$11内比A2大的个数+1

  =SUMPRODUCT((A2<$A$2:$A$11)*1)+1

  公式向下复制,则依次对$A$2:$A$11中每一个数据重复进行上述判断求和,从而排出数据区域$A$2:$A$11中每一个数据的位次。很显然,对于数据区域$A$2:$A$11中相同的数,判断和计算结果是相同的,也就是排出来的位次相同。所以用SUMPRODUCT函数排出来的名次,与直接用RANK函数排出来的名次是一样的,有重复名次,但最大位次数不超过数据区域$A$2:$A$11中的总数据个数。

  如果希望排出的位次没有重复,而数据区域$A$2:$A$11中相同数据的位次按数据出现的先后顺序排位,可以用下面的公式:

  =SUMPRODUCT((A2<$A$2:$A$11)*1)+COUNTIF($A$2:A2,A2)

  公式向下复制即可。两种排名对比如下表所示:A B C列数据 名次重复顺序名次56 8 865 5 589 3 365 5 656 8 978 4 490 1 152 10 1060 7 790 1 2

  综上所述,对于多条件的计数或者求和,可以用数学函数SUMPRODUCT来比较方便的解决。在使用函数时,进行数据引用的单元格区域或数组应该大小一致,不能采取整列引用(形如AA)。如果跨表使用函数SUMPRODUCT,与其它函数跨表引用数据一样,数据区域前面应该标明工作表名称。[color=#EE1D24,strength=3);]计数公式中最关键的是确定计数的判断条件。[color=#EE1D24,strength=3);]求和公式在原来的计数公式中,在相同判断条件下增加了一个求和的数据区域。[color=#EE1D24,strength=3);]用函数SUMPRODUCT求和,函数需要的参数一个是进行判断的条件,另一个是用来求和的数据区域。

 原文来自百度http://baike.baidu.com/view/3222219.htm

0

阅读 收藏 喜欢 打印举报/Report
后一篇:text函数
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有