这样的模糊求和你很可能不会,不信进来看看
如图1,要对A列应用名称为同一款游戏名称的付费金额求和,比如,A2:A5都是王者荣耀,要对B2:B5求和,也许你会说这还不简单吗,直接用sum(B2:B5)不就行了,可是每种应用名称对应的行数不一样,要生成的报表如图2。先思考两分钟想想怎么做吧。
图1
图2
解决思路如下:
Step1:要生成图2报表,首先得把A列应用名称的简称提取出来,A列内容的特点是前面是文字,中间是数字,只需提取数字前面的文字,因此考虑left或leftb函数提取,C2公式=LEFTB(A2,SEARCHB("?",A2)-1)
图 3
公式意思是先找出A2中单字节的数字所在的字节数,字节数减去1就是数字前面的汉字字节数,再用leftb取左边的汉字。一个汉字代表2个字节,半角状态下的一个数字代表1个字节。Searchb是在一个字符串中查找特定字符位置的函数,而且可以区分单双字节,它和Find的区别是可以使用通配符。公式中的?就是表示 任意一个单字节的字符,属通配符,不是真的查找问号。
Step2:对C列提取不重复内容,可以用数据→删除重复项,也可以用数组公式,D2公式为=IFERROR(INDEX(C$2:C$81,MATCH(,COUNTIF(D$1:D1,C$2:C$81),)),""),注意数组公式要用快捷键【Ctrl+Shift+Enter】,三键同时按下去。
图 4
Spep3:D列是A列的简称,借助通配符*用sumif函数求和。E2公式=SUMIF(A:A,"*"&D2&"*",B:B)
图 5
&是连接符,D2前后连接*,表示D2前后有任意个字符,如果A列内容和D列前后带任意个字符的内容相符就求和。
一个问题的解决用到了leftb, searchb,sumif等多个函数,通配符*和?,删除重复项等多个技巧。
案例文件下载地址 http://url.cn/45gAMd9 ,如果有兴趣的下载下来自己做一遍吧,光说不练假把式。
今天的分享到此结束,如果想看更多历史文章,请从菜单所有文章查看。