☆本期内容概要☆
大家好,我是冷水泡茶,前一阵子我们分享过一篇EXCEL函数的文章(Excel 公式函数/你确定你会用Sum?),SUM函数比较简单,估计大家都会用,但有一点不方便的是,当单元格有错误值时,它也返回错误值,而且它会忽略文本型的数字,我们看几个测试的例子:
3、第三行,单元格值同上,用自定义函数MYSUM,得出了我所希望的结果,把数值和文本型数字都加起来=mysum(C3:S3)。 4、第四行,加入一些错误值,直接用=SUM(C4:S4),得出错误值。 5、第五行,单元格值同上,用第二行的SUMIF的方法,忽略了错误值,但文本型数字同样也忽略了。 6、第六行,单元格值同上,用=mysum(C6:S6),也得出了我想要的结果,即把文本型数字当作数值参与计算。 说了半天,来看一下我们的自定义函数mySum是什么样的,其实很简单:
代码解析:循环选择的单元格,判断一下它是不是数值,是数值就把它转换成Double类型,再累加。 那么,除了自定定义函数,我们有没有其他公式函数达到类似的效果呢?我们来看一个例子: U列,用的是一个公式,得到了与我们自定义函数同样的结果:
公式不长,但用了3个函数,而且是数组公式。 类似的,我们还可以这样写:
这里用IFERROR把错误值转换成0,乘上1,把文本型数字强制变成数值。 写到这里的时候,我忽然觉得,第二行的SUMIF公式,是不是可以写成:
赶紧试一下,第二行可以,得出同样的结果,但第五行就不行了,得出了错误值。于是上网搜了搜,原来,在EXCEL中,错误值是不等于0的,所以条件为"<>0"时,它包括了错误值,结果自然就返回错误值了。 最后,我们提醒一下,我们在求和时,最好能确保所有单元格都是数值,以防得出错误的结果。如果是一列数数据,我们可以进行一下“分列”操作,把文本型数字转换成数值再求和。 对于错误值,一般是在我们计算、查找取值过程中所产生的,我们可以预先进行处理,比如用IFERROR函数,ISERROR函数结合IF函数等方式避免出现错误值。当然,错误值有时候也有它的作处,比如根据不同的错误值,我们可以知道出现这种错误的原因是什么。 我们今天所分享的自定义函数mySum,只是为了说明一种解决问题的思路与方法,就我个人而言,实际并没有太大的实用价值,可能也不会实际使用它,但我们可以参考它的VBA代码。 |
|