分享

在Excel中,求和函数SUM和SUMIF,SUMIFS分别怎么用,有什么区别?

 酒心1000 2017-11-24

Excel中,常用求和函数有SUM\SUMIF\SUMIFS\SUMPRODUCT。DSUM和SUBTOTAL的9、109参数也可以用来求和,某些条件下MMULT函数也可以用来求和。其中SUMIFS支持MS EXCEL 2007及其以上版本,可以完全取代 SUMIF,SUM IF又可以完全取代SUMIF。SUMIF/SUMIFS都支持区域的简写,还支持文本值和空值,不支持错误值。例如求和区域为A2:A100,可以写成A:A。求和区域有文本值或者空值,可以得到正确的求和结果,求和区域有错误值则显示错误。

SUMPRODUCT不支持文本值和错误值,支持空值,所以一般用SUMPRODUCT我们会写具体求和区域。SUM可以求连续区域或不连续区域的和,SUMIF/SUMIFS除了一类特例,一般只支持单行或单列区域的求和,多行多列连续区域或不连续区域需要借助OFFSET函数。

MMULT函数戏称妹妹函数,属于矩阵运算函数,第一参数如果是m*k的矩阵,第二参数必须是k*n的矩阵,结果是一个m*n的矩阵。不支持文本和错误值,也不支持空值。

DSUM属于D字头函数,需要辅助列,只支持连续区域的条件求和。

SUBTOTAL的9、109参数一般用于多维数组的求和。

下面通过例子来说明,为了图片显示清晰,用了两张图片。

数据如下图:

公式如下图,备注为ctrl shift enter,表示需要按ctrl shift enter.

这里的公式都为数组公式,SUMPRODUCT只要多个参数引用的数组大小一致,不需要按ctrl shifit enter,SUMIF/SUMIFS引入常量数组,也不需要按ctrl shifit enter。

这里需要注意的就是常量数组的写法,例如{'冰箱','空调'}和{'冰箱';'空调'}是有区别的。

计算9月份冰箱和空调的销量,公式=SUM(SUMIF(A2:A16,{'冰箱','空调'},C2:C16))

和公式=SUM(SUMIF(A2:A16,{'冰箱';'空调'},C2:C16))是一样的结果,但不是一样的原理。

逗号连接的常量数组公式=SUM(SUMIF(A2:A16,{'冰箱','空调'},C2:C16))等效为

=SUM(SUMIF(A2:A16,{'冰箱','空调'},OFFSET(B2:B16,,{1,1}))),先在C2:C16区域计算冰箱的销量,再在C2:C16区域计算空调的销量,结果是一个1行2列矩阵,然后求和。

分号连接的常量数组公式=SUM(SUMIF(A2:A16,{'冰箱';'空调'},C2:C16)),先在C2:C16区域计算冰箱或空调的销量,结果是一个2行1列矩阵,再求和。

计算9月份、11月份冰箱和空调的销量,如果公式写成

=SUM(SUMIF(A2:A16,{'冰箱','空调'},OFFSET(B2:B16,,{1,3}))),会得到什么结果呢?

答案是9月份冰箱的销量与11月份空调的销量之和。

公式原理:先在C2:C16区域计算9月份冰箱的销量,然后再在E2:E16区域计算11月份空调的销量,得到一个1行2列矩阵,最后求和。

如果是分号连接的公式=SUM(SUMIF(A2:A16,{'冰箱','空调'},OFFSET(B2:B16,,{1,3})))

公式原理:先在C2:C16区域计算9月份冰箱或空调的销量,然后再在E2:E16区域计算11月份冰箱或空调的销量,得到一个2行2列矩阵,最后求和。

至于A2:A16={'冰箱','空调'}为什么不写成A2:A16={'冰箱';'空调'}?

因为A2:A16是一个15*1的矩阵,{'冰箱','空调'}是一个1*2,这两个矩阵满足矩阵运算法则,等效为15*2矩阵与15*2矩阵相等,结果是一个15*2矩阵。如果写成A2:A16={'冰箱';'空调'},那么A2:A16是一个15*1矩阵,{'冰箱';'空调'}是一个2*1矩阵,两个矩阵相等不满足矩阵运算法则。

有时候我们可以发掘出比较好玩的用法,如果查找区域有唯一数字值,可以用DSUM实现查找功能。如图数据,假设只有唯一个最大值:

查找奖金最高者来自哪个部门

E2输入=max(C2:C10),F2输入=DSUM(A1:C10,1,E1:E2)

查找部门1的李四和部门2的李四的奖金,G6输入

=DSUM($A$1:$C$10,3,$E$5:F6)-SUM($G$5:G5),下拉填充

评析:DSUM需要辅助列,注意辅助列的标题和源数据的标题一致。

SUMIF/SUMIFS的特例,如图求张三1月到4月的奖金和。

公式如下图,备注为数组公式的需要按ctrl shift enter.

再来看看这个例子,SUBTOTAL函数的多维数组求和。如图数据,求最后一个非空值的和。

B12输入公式

=SUMPRODUCT(((SUBTOTAL(2,OFFSET(A11,,COLUMN(A:E)-1,-ROW(1:10))))=0)*SUBTOTAL(9,OFFSET(A10,,COLUMN(A:E)-1,-ROW(1:10))))

这个公式理解起来特别费劲,写出来只是为了说明SUBTOTAL的用处,喜欢深究的小伙伴可以仔细研究。这个问题,一般我们用辅助列更方便。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多