欢迎转发和点一下“在看”,文末留言互动!
置顶公众号或设为星标及时接收更新不迷路
小伙伴们好,今天要和大家分享一道有趣的统计求和题目。说它有趣,是因为它运用了4个我们平时不太使用的函数,而这正是解决这个问题的关键,它们将复杂的解题过程变得异常简单明了。
好了,我们一起来看看原题吧!
题目要求统计小课课时。观察一下源数据,每当括号中的课时大于1课时时,括号外面的数量就大于1,反之则是1。这个是本题的一个特征,而我们则正好利用了这一特征。
01
多个复数函数在数据处理中发挥重要的作用
如果我们考虑使用常规的方法,那就要首先考虑如何将课时和数量提取出来,同时还要考虑计算的问题。这个过程是异常复杂的。还好,今天介绍的这4个函数,则可以轻松化解这个问题。
在单元格B2中输入下列公式,三键回车并向下拖曳即可。
=MAX(IMREAL(IMDIV(IMSUM(FILTERXML(""&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"(","<b>"),"课时)*","-"),"=","i</b>")&"</a>","a/b")),{"1","-i"})))
在高中的数学中我们学习过复数的知识,虽然现在我也差不多都还给老师了,但这道题目则可以利用和复数相关的几个函数。
IMREAL:提取复数的实数部分
IMDIV:求复数和另一个数的商
IMSUM:分别对复数的实数部分和虚数部分汇总求和
FILTERXML(""&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"(","<b>"),"课时)*","-"),"=","i</b>")&"</a>","a/b")
利用FILTERXML函数,也就是海鲜大法,我们可以将类似于“(10课时)*1”的字符串替换成“10-1i”这样的格式。
这个由三个SUBSTITUTE函数和FILTERXML函数共同完成,这里不再重复介绍了。公式的结果第一行的为"10-1i",第三行的为{"10-1i";"10-1i"}。
IMSUM(FILTERXML(""&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"(","<b>"),"课时)*","-"),"=","i</b>")&"</a>","a/b"))
之所以要单独提第三行,是因为它的源数据中有两组课时需要统计求和。接下啦,利用IMSUM函数分别对实数部分和虚数部分求和。第一行的结果仍旧是是"10-i",而第三行的结果则变成了"20-2i"。
IMDIV(IMSUM(FILTERXML(""&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"(","<b>"),"课时)*","-"),"=","i</b>")&"</a>","a/b")),{"1","-i"})
接下来利用IMDIV函数,来计算上面的结果和“1”及“-i”这两个数据的商。这样做的目的是,让复数的实数部分和虚数部分调换位置。
那么第一行的结果就变成了{"10-i","1+10i"},而第三行的结果就变成了{"20-2i","2+20i"}。
IMREAL(IMDIV(IMSUM(FILTERXML(""&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"(","<b>"),"课时)*","-"),"=","i</b>")&"</a>","a/b")),{"1","-i"}))
下面就要用IMREAL函数来提取实数部分了。第一行的结果是{10,1},而第三行的结果是{20,2}。朋友们看一下,较大的值是不是就是课时的汇总和了吗?
MAX(IMREAL(IMDIV(IMSUM(FILTERXML(""&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"(","<b>"),"课时)*","-"),"=","i</b>")&"</a>","a/b")),{"1","-i"})))
最后利用MAX函数提取大值即可
当然,如果例如在第三行中括号外的数量变成2,那上面介绍的方法及不适用了,需要书写更复杂的公式,这里不再继续讨论了, 朋友们如果有兴趣可以自己动手试一试。
本题内容练习文件提取方式:
链接:https://pan.baidu.com/s/1g_XC2iPqz0jUS3ifgVh9yg?pwd=icqn
提取码:icqn
-END-
长按下方二维码关注EXCEL应用之家
面对EXCEL操作问题时不再迷茫无助
我就知道你“在看”