欢迎转发和点一下“在看”,文末留言互动!
置顶公众号或设为星标及时接收更新不迷路
小伙伴们好,今天要和大家分享一则老生常谈的问题。在同一个单元格内,有文本,有数字,现在需要对数字进行求和。
在以前的帖子中我专门向大家介绍并分析了两种不同的方法,以及它们各自的优缺点及应用场合。朋友们还记得吗?不记得了也没有关系,在今天的帖子中我们还会提及到的!
今天的这个帖子是一个汇总,当然,我也不可能汇总所有的可能性。我会尽可能给大家分享更多的公式及他们的思路,方便大家借鉴和使用。
好了,话不多说,上菜!
01
SUBSTITUTE函数
我们用SUBSTITUTE函数进行字符替换。
在单元格B2中输入下列公式,三键回车并向下拖曳即可。
=SUMPRODUCT(--TEXT(MID(TEXT(MID(SUBSTITUTE((SUBSTITUTE(A2,",","次")&"次"),"次",REPT(" ",9)),ROW($1:$50),9),),2,8),"0.000;-0.000;0;!0"))
思路:
用SUBSTITUTE函数进行字符替换,最终得的结果是"销售部20次采购部25次人事部10次"
利用SUBSTITUTE经典应用公式,得到这样一个结果{"销售部20 ";"售部20 ";"部20 ";"20 ";"0 ";" ";" 采";" 采购";" 采购部";" 采购部2";" 采购部25";" 采购部25 ";" 采购部25 ";" 采购部25 ";"采购部25 ";"购部25 ";"部25 ";"25 ";"5 ";" ";" 人";" 人事";" 人事部";" 人事部1";" 人事部10";" 人事部10 ";" 人事部10 ";" 人事部10 ";"人事部10 ";"事部10 ";"部10 ";"10 ";"0 ";" ";" ";" ";" ";" ";" ";" ";" ";" ";"";"";"";"";"";"";"";""}
接下来,TEXT函数将所有数值部分强制转换为空值{"销售部20 ";"售部20 ";"部20 ";"";"";" ";" 采";" 采购";" 采购部";" 采购部2";" 采购部25";" 采购部25 ";" 采购部25 ";" 采购部25 ";"采购部25 ";"购部25 ";"部25 ";"";"";" ";" 人";" 人事";" 人事部";" 人事部1";" 人事部10";" 人事部10 ";" 人事部10 ";" 人事部10 ";"人事部10 ";"事部10 ";"部10 ";"";"";" ";" ";" ";" ";" ";" ";" ";" ";" ";"";"";"";"";"";"";"";""}
MID函数从每个字符串的第二位开始,提取长度为8的字符串。这样做的原因是,经过上面一系列的步骤后,一定存在于“一个文本字符加上一串数字字符再加上一定数量的空格”这样的字符串。这步提取的结果就是“数字+空格”
接下来再次利用TEXT函数将文本、负数等强制转换为0
最后用SUMPRODUCT函数求和
02
巧妙定位数字部分
这个公式同样也是使用SUBSTITUTE函数,但有所不同的是,在确定数字部分的位置时,它的思路去令人拍案叫绝!
在单元格B2中输入下列公式,三键回车并向下拖曳即可。
=SUMPRODUCT(IFERROR(--MIDB(TRIM(MID(SUBSTITUTE(A2,",",REPT(" ",99)),ROW($1:$3)*100-99,99)),SEARCHB("?",TRIM(MID(SUBSTITUTE(A2,",",REPT(" ",99)),ROW($1:$3)*100-99,99))),10),0))
思路:
TIRM(MID(SUBSTITUTE()))这这一串,都是利用了经典应用将源文件中的三部分分别提取出来,结果为{"销售部20";"采购部25";"人事部10"}
SEARCHB("?",TRIM(MID(SUBSTITUTE(A2,",",REPT(" ",99)),ROW($1:$3)*100-99,99)))部分,则是确定了第一个单字节字符的位置,结果为{7;7;7}
下面则利用MIDB函数依次从第7位开始,提取长度为10 的字符串,结果为{"20";"25";"10"}
接下来减负运算将文本型数字转换为数值型数字,IFFERROR函数屏蔽错误后,SUMPRODUCT求和
这里使用SEARCHB函数的用法,确定了第一个数字的位置。请朋友们记住这个用法。
03
利用TEXT函数处理数据
总体上,下面这个公式的思路和上面的几例都大同小异。利用SUBSTITUTE函数进行文本的替换,利用MID函数提取文本,TEXT函数取出数字部分后在进行依次MID函数提取和TEXT函数的处理,最后SUMPRODUCT函数求和。
只不过,这则公式看起来更加简短。
04
同样TEXT函数,更加简短
这一个和上面有异曲同工的妙处!
这个公式里使用了“*1”来将本型数字转换为数字型数字,和上个例子中的减负运算道理是一样的。
05
这一个是笔者喜欢的公式之一
在单元格B2中输入下列公式,三键回车并向下拖曳即可。
=SUM(TEXT(LEFT(TEXT(MID(A2&"a",COLUMN(2:2),ROW($2:$16)),),ROW($1:$15)),"0%;;0;!0")*ISERR(-MID(A2,COLUMN(2:2)-1,2)))
这个公式相对有一些复杂,朋友们记住并学会套用就可以了。以上的几个例子中,都是用了TEXT函数来进行数据的强制转换。这个方法大家也要记住并学会灵活使用。
06
这一个是笔者喜欢的公式之二
这一则也是我非常喜欢用的公式之一。
在单元格B2中输入下列公式,三键回车并向下拖曳即可。
=SUM(IFERROR(--RIGHT(LEFT(A2,ROW($1:$50)-1),FREQUENCY(ROW(A:A),ISERROR(-MID(A2,ROW($1:$50),1))*ROW($1:$50))-1),0))
关于最后两则公式的详细介绍,请参看帖子华山论剑:数字提取技术谁更强,应用之家帮你忙
写了这么多,目的还是希望大家在遇到问题时能根据实际情况选择最适合的那一款公式解决问题!
-END-
长按下方二维码关注EXCEL应用之家
面对EXCEL操作问题时不再迷茫无助
我就知道你“在看”