不规范数据中计算所有数字之和

大家新年好。今天要分享的内容是在不规范数据中求所有数字之和。先来看下数据源和计算后的结果。A列是数据源,相当地不规范。现在要对每一行的所有数字求和,比如第1个为5+10+30+300+(-300),最后等于45,如BCDE列所示。数据源中的数字有正数,负数还有小数(最多2位)。所以难度还是很大的。方法也不是我自己想出来的,都是和excel前辈们学习的,在此要感谢excel前辈们。

这里给出4个公式,都挺复杂的。基础不好的小伙伴,看不懂也是正常的。我自己写的时候都有点费劲。

第1个主要用的frequency,在B2单元格输入公式=SUMPRODUCT(--TEXT(RIGHT(LEFT(A2,ROW($1:$51)-1)&" ",FREQUENCY(ROW($1:$50),ISERR(-(MID(A2&"a",ROW($1:$50),1)&0))*ROW($1:$50))),"0%;-0%;0;!0")),向下填充,完成。

第2个主要用的text,其实还有left+right。在C2单元格输入公式=SUMPRODUCT(--TEXT(RIGHT(TEXT(RIGHT(LEFT(A2,ISNUMBER(-MID(A2,ROW($1:$50),1))*ISERR(-(MID(A2&"a",ROW($2:$51),1)&0))*ROW($1:$50)),COLUMN(A:L)),),COLUMN(A:L)-1),"0%;-0%;0;!0")),向下填充,完成。

第3个主要用的textjoin+evaluate,evaluate是宏表函数,要定义名称,且文件保存格式为.xlsm。我定义的名称为求和1。直接在D2单元格输入公式=求和1,向下填充就可以了。求和1这个名称的公式为=EVALUATE(TEXTJOIN("",,IF(ISERR(-(MID(A2,ROW($1:$50),1)&0)),"+0",MID(A2,ROW($1:$50),1))))。

第4个还是用的textjoin+evaluate,定义的名称为求和2。在E2单元格输入公式=求和2,向下填充,完成。求和2这个名称的公式为=EVALUATE(SUBSTITUTE(TRIM(TEXTJOIN("",1,IF(ISERR(-(MID(A2,ROW($1:$50),1)&0))," ",MID(A2,ROW($1:$50),1))))," ","+"))。

大家也看到了这些公式都很长,所以数据规范是多么的重要。数据不规范,就是给自己挖坑,就算你有能力处理也会烧脑细胞,还会掉头发。

如果数据规范,可能几个简单的函数就可以搞定了。

文件链接:

https://pan.baidu.com/s/1TstvK_MSwp5hJ_L4Pwlvkg

提取码:2v7o

(0)

相关推荐