为什么00后同事仅用一个求和公式就得到了老板的赏识?这就是答案!

每天一点小技能

职场打怪不得怂

编按:当数字不是单一出现在一个单元格中,甚至一个单元格中有多个不同量词的数字时,使用SUM函数求和就不再简单。这时,如果表格数据简单,我们可以用分列等方法重新做表;可是当表格数据足够复杂庞大,再重新做表就费时费力。最佳的办法让SUM函数与其它函数的进行嵌套,才能让统计求和顺利高效的完成……

觉得自己写得出公式已经很牛B了?可是你知道吗,还有人比你写的公式更简短简洁!

最近笔者看到这样一个题目,觉得很有意思,也很有帮助,于是分享给大家。

生活中常见的香烟,其包装规格是这样的:

-每箱50条

-每条10包

在下面这个题目中,大家一起帮助小卖部的李老板算一算到底有多少包香烟。

方法1

利用FREQUENCY函数,大家可以解决这个问题。

公众号回复:入群,下载练习课件

在单元格C2中输入公式“=SUM(IFERROR(--SUBSTITUTE(RIGHT(LEFT(A2,ROW($1:$10)),FREQUENCY(ROW($1:$10),ISERROR(--MID(A2,ROW($1:$10),1))*ROW($1:$10))),{"箱","条","包"},""),0)*{500,10,1})”,按CTRL+SHIFT+ENTER三键,并用鼠标向下拖曳即可。

函数解析:

①MID(A2,ROW($1:$10),1)部分,依次从第1个、第2个…提取单元格A2中字符串的字符,提取长度为1。其中,ROW($1:$10)的第二个参数的数值,只要是比字符串的位数大就可以。

②ISERROR(--MID(A2,ROW($1:$10),1))部分,--将出现的空值等转换为错误值,ISERROR函数将错误值转换为逻辑值。

③ISERROR(--MID(A2,ROW($1:$10),1))*ROW($1:$10)部分,屏蔽了单元格A2中字符串中的数字部分所对应的自然数序列,结果为{{0;0;3;0;5;0;7;8;9;10}。

④利用FREQUENCY在上述的区间内对ROW($1:$10)计频,结果为{0;0;3;0;2;0;2;1;1;1;0}。

⑤LEFT(A2,ROW($1:$10))部分,利用LEFT函数对A2依次提取1个、连续2个、连续3个…字符,其结果为{"1";"10";"10箱";"10箱2";"10箱2条";"10箱2条3";"10箱2条3包";"10箱2条3包";"10箱2条3包";"10箱2条3包"}。

⑥将LEFT函数和FREQUENCY函数的结果作为RIGHT函数的参数。然后,RIGHT函数依据它开始从右提取。请注意上边三组颜色所对应的值。RIGHT函数提取的结果是{"";"";"10箱";"";"2条";"";"3包";"包";"包";"包";#N/A}。

⑦利用SUBSTITUTE函数将“箱”、“条”和“包”用空值替换掉。再利用“--”和IFERROR函数将错误值转换为0,结果为{0,0,0;0,0,0;10,0,0;0,0,0;0,2,0;0,0,0;0,0,3;0,0,0;0,0,0;0,0,0;0,0,0}。

⑧最后,将上述结果乘以{500,10,1},再用SUM函数求和得到最终结果。

小结:

这个函数长度为154个字符,对于很多小伙伴来说,不管是看起来还是写起来,都不太简洁。其实,还有更简单的公式可以用在这里,如下面的方法2。

方法2

这个公式就简单多了,更是笔者常用的最简短的方法之一。

在单元格C2中输入公式“=SUM(IFERROR(FIND(ROW($1:$999)&{"箱","条","包"},A2)^0*LEFT(ROW($1:$999))*10^LEN(ROW($1:$999)),)*{50,1,0.1})”,按CTRL+SHIFT+ENTER三键,并用鼠标向下拖曳即可。

这个构思比较奇妙!下面,大家一起来看看!

函数解析:

①ROW($1:$999)&{"箱","条","包"}部分,用行号和{"箱","条","包"}分别组合构成FIND函数的查找值。其结果是一个999行3列的矩阵。为什么是999?因为数据中最大数值是613,所取数值一定要大过这个数字。

②FIND(ROW($1:$999)&{"箱","条","包"},A2)^0部分,FIND函数查找到结果以后,返回一个数字信息后,并将其转换为“1”。

③LEFT(ROW($1:$999))部分,提取行号信息中最左边的数字

④LEFT(ROW($1:$999))*10^LEN(ROW($1:$999))部分,将上面提取的结果中的1-9扩大10倍;10-99扩大100倍;100-999扩大1000倍。

⑤把以上FIND函数部分和LEFT函数部分,两者相乘,得到一个999行3列的矩阵。在这个矩阵中,所有能被FIND函数查找到的数据,其位置上都对应地显示出LEFT函数的结果扩大倍数后的数值,其余都是错误值。

⑥利用IFERROR函数将错误值转为“0”

⑦最后乘上{50,1,0.1},再套用SUM函数就可以求出最后的结果了。因为在LEFT函数的步骤中,是以10做为底数的,等于为最终的结果都同时扩大了10倍;所以在这个步骤中要缩小10倍,得出结果是{50,1,0.1}而不是{500,10,1},其分别对应{"箱","条","包"}。

补充:

这个公式还可以改写成:

“=SUM(COUNTIF(A2,"*"&ROW($1:$999)&{"箱*","条*","包*"})*(LEFT(ROW($1:$999))*10^LEN(ROW($1:$999)))*{50,1,0.1})”

有兴趣的小伙伴可以试试分析一下其中的函数,剖析一下它们分别起了什么重用!

方法3

最后再向大家介绍一个公式。这个公式是有缺陷的,但是它的逻辑思路非常值得我们学习和借鉴,因此也分享给大家。

在单元格C2中输入公式“=SUM(IFERROR(SUBSTITUTE(RIGHTB(LEFT(A2,FIND({"箱";"包";"条"},A2)),4),{"箱";"包";"条"},)*{500;1;10},))”,按CTRL+SHIFT+ENTER三键,并用鼠标向下拖曳即可。

大家可以看到,这个公式的结果几乎都是正确的,但在计算613箱是出了错!

现在,一起来分析一下这个公式的思路。

函数解析:

①FIND({"箱";"包";"条"},A2))部分。这部分的理解比较简单,即在单元格A2中分别查找{"箱";"包";"条"},并返回具体的位置信息。

②LEFT(A2,FIND({"箱";"包";"条"},A2)),4)部分,依次从左向右提取字符串,其结果是{"10箱";"10箱2条3包";"10箱2条"}。

③RIGHTB函数部分,从右提取4个字节。注意,是字节,不是字符。由于"10箱2条3包"和"10箱2条"提取不到第4个字节,因此实际只提取了3个字节。这部分的结果是{"10箱";" 3包";" 2条"},注意“3”和“2”前面是有空格的。

④利用SUBSTITUTE函数将"箱"、"包"和"条"用空值替换。

剩下的部分就比较简单了,这里就不再花更多的笔墨介绍了。

从本期的帖子中,大家可以看到,不同的思路,写出来的公式有长有短,但没有优劣之分,只有逻辑思路不同。多思考,多练习,才是掌握函数技巧的秘籍!

最后留给小伙伴们一道思考题目:

最后一个公式中,怎样解决计算613箱时出现的错误?

扫一扫添加老师微信

扫一扫,在线咨询Excel课程

Excel教程相关推荐

VLOOKUP函数的偷懒指南,新同事用这个方法竟提早了整整2小时完工!
连这些最基础的函数你都玩不转,就别问为什么工资那么低了!
Excel教程:5个神级快捷键!
100个工作簿,同事竟只花了5秒就合并完成了!(即学即用)

想要全面系统学习Excel,不妨关注部落窝教育《一周Excel直通车》视频课或者《Excel极速贯通班》

主讲老师:滴答

 

Excel技术大神,资深培训师;

课程粉丝100万+;

开发有《Excel小白脱白系列课》

《Excel极速贯通班》。

原价299元

限时特价 99 元

少喝两杯咖啡,少吃两袋零食

就能习得受用一生的Excel职场技能!

(0)

相关推荐