Dsum函数,一个有趣的、高效的条件求和函数
大家经常使用的条件求和函数应该是Sumifs、Sumifs函数,有时候也会用的Sum、Sumproduct的数组函数的方式来进行条件求和,但是Dsum函数使用的应该很少了,或是就从没用过,说实话我自己用也少,但是有一点要说明的是,多掌握一个函数还是很有必要的,因为每个函数都有使用的局限性。
Dsum函数有个用法就比较好,比如下面的表是我之前在一家保险公司计算手续费时候需要查找费率,一些函数也是能做到的,但是做起来其实是比较费力的,下面这个还是一个把条件进行简化后的表,实际上条件会更多,比如我们会把某一产品的费率按时间进行划分,在2021年1月5日至2021年1月20日之间设定一个费率,之后再设定一个费率,还有就是保险公司的产品比较多,销量又大,营销的部门和分公司又多,各个代理机构的费率还有差异,这时候这个设定条件去查找费率那公式的长度简直不要太爽酸
我当时没有使用Dsum函数而是使用了sumproduct这个函数,结果就是公式很长,计算效率也很差,整个表都卡死了,又改用了sumifs函数,这长度是令人崩溃的,当时是这样的
【=SUMIFS(代理保费数据!J$4:J$3000,代理保费数据!$B$4:$B$3000,'打包费用计算-银保+线上'!$B4,代理保费数据!$D$4:$D$3000,'打包费用计算-银保+线上'!$D4,代理保费数据!$E$4:$E$3000,'打包费用计算-银保+线上'!$E4,代理保费数据!$F$4:$F$3000,'打包费用计算-银保+线上'!$F4,代理保费数据!$G$4:$G$3000,'打包费用计算-银保+线上'!$G4,代理保费数据!$C$4:$C$3000,'打包费用计算-银保+线上'!$C4)*$H4】
但如果当时知道这么一个函数,我的痛苦会减少很多。
接下来我们看看这个函数的优点在哪,通过刚才的描述,想必大家已经猜到了,那就是条件越多,这个函数使用起来的效率就会越高。
首先我们还是说下这个函数的语法
dsum函数的语法格式
=dsum(database,field,criteria)
=(数据区域,字段名,条件区域)
参数criteria——条件区域,可以是一个或者多个条件
参数field——字段名(即指定求和的数据列)
Field 也可以是代表求和数据列的数字:1 代表第一列,2 代表第二列。
我列了一个表如下:
当然第二个参数5也可以用英文下的双引号加字段名称“保费”来替代,但显然用数字更简单。
如果我们把J2单元格的公式直接往下拖会发生什么,我们看看:
我们会发现J3单元格的数据要大,用肉眼观察数据应该是最后一行的16107,这是出问题了么?怎么会这样呢,其实大家不用担心,这个函数没有出现问题,它是将北京分公司的数据也计算了,因为我们的第三个参数是H1$:I3,也就是把这两个分公司的数据都算到里面了,这时候我的灵感来了,我把上面的数据减掉不就行了么,咱就想到就开始忙活起来,其实做起来也很简单,我在J3单元格减了一个sum(J$2:J2),然后我们再向下拖动,我们发现我们的结果变得正确了,这里用到一个单元格混合引用的技巧,也就是锁定行,也就是锁定了第2行,随着向下拖动,我们单元格引用的范围变成了2行和3行,2行到4行,随着我们的拖动不断的增加。
如果我们再增加条件,是不是觉得比其他的求和函数简单许多了呢。
使用Dsum函数也要注意一个地方就是如果我们条件比较少的情形下如果遇到下面的情况我们要懂得如何解决。
这个主要是大舅妈和大舅前两个字是一样的,这时候我们只需把单元格格式设置为文本,输入=大舅,或直接输入'=大舅,就能解决这个问题。