厌倦了车水马龙, 便想去看山川湖海; 吃腻了白菜豆腐, 便想来点鲜椒小炒; 学够了基础知识, 便想来点儿难度挑战一下。 今天就来出个思考题, 看看大家有没有长进。 数据不规范,加班两行泪。相信每一位Exceler都深有体会,但有些时候,总有一些不谙此道的同事或者XX领导,拿着不规范的数据来挑战你的极限,比如下面这个。 需求:将这样的文本快速地处理到excel中,并按下图所示的表头排列。 好家伙,数据不规范,准备工作倒是挺齐全。 如图所示,excel的表头字段顺序,与数据源的顺序不一致,并且有些字段无内容。 有没有同学想挑战一下的,可以将答案写在评论区哟~ 下面,我们先抛砖引玉,给大家两种解决方案吧! 解题思路:函数处理,必须要有辅助的处理过程,然后把处理区的内容“粘贴为数值”到保存区中,按上图布局。 1、在B4:J4单元格区域,输入辅助列,指明文本字符串中的某一部分是字段对应的内容,没有内容的字段不用填,如下: 2、在B7:J7单元格区域输入函数: =IF(B4="","",TRIM(MID(SUBSTITUTE($B$3,",",REPT(" ",100)),B4*100-99,100))) 向右拉至J7单元格,填充函数,就得到了区分好的内容。 3、最后再复制B7:J7,粘贴数值到下面的“数据保存区”就可以了。 【函数解析】 这是一个经典的按分隔符取字符串的嵌套函数。 首先,使用REPT函数,制作100个空格的字符串,再使用SUBSTITUTE函数将原字符串中的英文逗号都替换成100个空格, 然后,使用MID函数结合我们刚才在第4行加的辅助列,提取从2*100、5*100…为第一位开始的字符串100位,因为空格中都有实际的字符串占位,所以这样就断出我们要的内容了,如果原字符串字数过多,可以调整空格的长度。 最后,用TRIM函数将字符串的左右两端空格去掉,即完成我们的工作了 如果有VBA基础的,这道题用VBA来解决是最高效的,给大家看看效果。 点击【执行】按钮,就可以快速得到想要的效果,是不是很炫酷呢! 代码分享如下: 记得最后保存的时候,要把文件另存为.xlsm(启用宏的文件)即可完成啦! 注意事项: 这个世界上不存在完美的字符串提取方法,只有写的完美的字符串。 再完善的解决方案,也是建立在文本串本身的规律之上。 如上面的两种方式,都是因为找到了其规律——即5个英文的逗号间隔6个区域的内容。内容可以缺省,间隔符不能少。 如果有不按规矩来的,今天的正确答案便是你眼中的错误答案,“二次操作”肯定是少不了的。 |
|