如图,A1单元格有多行数字(用Alt+Enter换行),如何求这些数的和呢?
请看B2的公式:
=SUMPRODUCT(--(0&TRIM(MID(SUBSTITUTE(A1,CHAR(10),REPT(" ",50)),ROW($1:$20)*50-49,50))))
套用此公式时,只需要把公式中的A1换成你要求和的那个单元格即可,比如B1。
公式说明:
1.作用:对一个单元内多行数值求和。
2.实现方式 :通过拆分换行符,构建数组,再求和。
3.详细解释:
*CHAR(10)是原单元格中用Alt+Enter产生的换行符号;
*REPT(" ",50)是产生50个空格;
*SUBSTITUTE是将某个单元格中的 旧字符 替换成新字符,因此:SUBSTITUTE(A1,CHAR(10),REPT(" ",50))这一步是把强制换行符号替换为50个空格;为什么是50个而不是5个呢?这是因为为了下一步利用MID函数对这个长字符进行分段截取(每组50个字符),如果你替换成的空格少了--比如5位--可是截取了10位,可能会导致一些大的数值(比如一个11位的数)就会被截断,无法得出正确的结果。所以这里要替换得位数大一点。当然也不需要50这么大,15位就可以了。
*接下来的MID函数是截取一段字符中的一部分,此公式是分别截取1-50位,51-100,等;
*用TRIM函数去一下两边的空格(因为MID截取出来的字符肯定是带有空格的);前面再加上个0目的是万一拆分出的内容为空的情况下,不会在“--”(这个运算下面解释)时报错(空值转化成数字会报错,而数字前加0,在转化成数字时,会自动将0去掉);
*-- 是对字串转化成数字。先变负数,再负一下就变回来了。如果字串本身就不是数字,那就转不过去了~
*最后再用SUMPRODUCT 就是对上述的分离出的数组进行求和,得到最终结果。
德宝老师博客原文:https://blog.debao.name/post-101.html?j=1