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的用处,喜欢深究的小伙伴可以仔细研究。这个问题,一般我们用辅助列更方便。 |
|
来自: 酒心1000 > 《1 Excel函数用法》