TEXT学废了!带分数(5又2分之1)的妙用!

你好,我是刘卓。欢迎来到我的公号,excel函数解析。在工作中我们会用到text这个“包罗万象”的函数,今天通过一个案例来分享下text中带分数的用法。带分数大家都知道,比如2又3分之1。在excel函数中带分数还是比较有用的,来看下面的案例。
-01-

具体案例

下表A2:H9是数据源,记录的是某商店在5/20-5/26这一周内牛奶的销量。要求是计算每天牛奶的总销量,结果如I列所示。比如,5/23这天牛奶共销售了5次,分别为5箱、4盒、3箱、1盒、5盒;而1箱=16盒,所以5/23这天的总销量为8箱10盒。

感兴趣的小伙伴可以先自己思考下怎么做,思考3分钟。

……


-02-

函数解析

在I3单元格输入下面的公式,向下填充,就可以了。

=SUBSTITUTE(TEXT(SUMPRODUCT(--SUBSTITUTE(SUBSTITUTE("0 "&B3:H3,"箱","/1"),"盒","/16")),"#箱#盒/16箱"),"/16箱",)

"0 "&B3:H3这部分用0空格连接上B3:H3,结果为{"0 9盒","0 3箱","0 8盒","0 3箱","0 4盒","0 2盒","0 4箱"}。至于为什么要在B3:H3前连接0空格,等下就知道了。

SUBSTITUTE("0 "&B3:H3,"箱","/1")这部分将上一步结果中的"箱"字替换为"/1",得到的结果为{"0 9盒","0 3/1","0 8盒","0 3/1","0 4盒","0 2盒","0 4/1"}。这样原来是"3箱"的就变成了"0 3/1",这是带分数的形式,表示0又1分之3,还是3。

SUBSTITUTE(SUBSTITUTE("0 "&B3:H3,"箱","/1"),"盒","/16")这部分将上一步结果中的"盒"字替换为"/16",得到的结果为{"0 9/16","0 3/1","0 8/16","0 3/1","0 4/16","0 2/16","0 4/1"}。这样原来是"9盒"的就变成了"0 9/16",还是带分数的形式,表示0又16分之9,相当于把9盒转化为16分之9箱。

通过上面3步,实际上是把"箱"和"盒"的单位全部统一成以"箱"为单位,只不过用到了带分数的转化方法。

--SUBSTITUTE(SUBSTITUTE("0 "&B3:H3,"箱","/1"),"盒","/16")这部分通过减负运算将文本型的带分数转化成数值,结果为{0.5625,3,0.5,3,0.25,0.125,4}。原来的"3箱"变成了3,原来的8盒变成了0.5,它们的单位都是"箱"。下图是每一步的过程:

到这里相信大家都是可以理解的,下面用sumproduct将转化后的箱数加起来,也就是这部分SUMPRODUCT(--SUBSTITUTE(SUBSTITUTE("0 "&B3:H3,"箱","/1"),"盒","/16")),最后的结果为11.4375。

那如何将11.4375箱转化为"11箱7盒"呢?这部分才是关键。这里还是用到带分数,而且要结合text函数,也就是在text中使用带分数。公式为TEXT(11.4375,"#箱#盒/16箱"),得到的结果为"11箱7盒/16箱"。

这里text的第2参数"#箱#盒/16箱"中使用的就是带分数的格式代码,我们可以先把其中的文本去掉,这样方便理解。代码就简化为"# #/16",表示几又16分之几。第1个"#"表示整数部分,第2个"#"表示分子,"/16" 表示分母。这里要注意的地方是在第1个#和第2个#之间必须有一个空格或者是一些其他的文本字符,否则,2个#连在一起的话共同表示分子。

#在text的第2参数中代表数字占位符,当然也可以用0来表示占位符,但在本题中我们使用#,因为它有很大的好处,后面就知道了。

TEXT(11.4375,"# #/16")得到的结果为"11 7/16",也就是将11.4375转化为11又16分之7。然后我们可以在带分数的格式代码中插入一些文本,也就是刚开始"#箱#盒/16箱"这个代码。在整数部分后加个"箱",分子后加个"盒",分母后也加个"箱",分母后为什么也要加"箱",后面会说明的。

TEXT(11.4375,"#箱#盒/16箱"),得到的结果为"11箱7盒/16箱"。最后用substitute将"/16箱"替换为空就可以了。

虽然结果得到了,但还有2个问题?当sumproduct求和的结果为整箱或整盒时,text得到的结果很令人费解。请看下面的2个公式。当text的第1参数为5时,返回的结果为"5箱",把后面的内容省去了;当text的第1参数为0.5时,返回的结果为"8盒/16箱",把前面的箱省去了。是不是很难理解?

下面我来告诉你原因:
1)当text的第1参数为整数时,"#箱#盒/16箱"这串格式代码中只会保留带分数的整数,它把分子和分母全部省略了,相当于把整数后到分母的部分给省去了,"#箱#盒/16箱",也就是把标绿色的那一截省略了,相当于只剩下了"#箱",所以这就是为什么最后要加一个"箱"字,是为了给整箱加单位。

2)当text的第1参数为小于1的小数时,"#箱#盒/16箱"这串格式代码中只会保留带分数的分子和分母,它会把整数省去,相当于把整数到分子前的部分给省去了,"#箱#盒/16箱",也就是把标绿色的那一截省略了,相当于只剩下了"#盒/16箱"

最后,再来一个复数取数的公式:

=SUBSTITUTE(TEXT(SUMPRODUCT(IMREAL(IMDIV(SUBSTITUTE(SUBSTITUTE(0&B3:H3,"箱",),"盒","j"),{1;"16j"}))),"#箱#盒/16箱"),"/16箱",)

今天的文章有点长,慢慢消化,相信定会对你有所帮助。

文件链接:

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

提取码:ewe2
(0)

相关推荐