优化Excel分列功能,长度拆分不用数点击上方“Excel和VBA”,选择“置顶公众号” 致力于原创分享Excel的相关知识,源码,源文件打包提供 一起学习,一起进步~~ 之前我们学习了利用VBA来拆分单元格的方法,主要还是优化Excel分列功能的,这不,又有小伙伴们反馈,分列功能有一个按照长度拆分单元格的功能,是不是可以优化下,在平时按照长度拆分的时候,我还要一个个的数,到多少个字段停止,而且分列功能的那个线条拖来拖去也比较麻烦,有没有办法直接输入一个数字就进行拆分呢? 好,安排上 场景说明这是我们今天构造的数据源,今天要尝试的是按照单元格长度进行拆分,我们就准备了一些长度不同的数据,这些数据你如果想要通过单元格的分列功能来操作的话,估计有点难度 Excel自带的分列功能,按照长度拆分的话,至少有一个大前提,就是数据的格式是完全一样的,才能够一次针对大量的数据进行拆分,如果数据长度不一样,那么就会出现上面动图的尴尬,我想要取每个数据的后面三位,但是因为单元格内容不同,没有办法一次性全部取出来,既然如此,VBA可以登场了 代码区Sub testc() Dim rng As Range, a As Range, sp sp = Application.InputBox("请输入前后长度,用逗号隔开", "拆分长度的输入", , , , , , 2) lsp = Split(sp, ",")(0) rsp = Split(sp, ",")(1) Set rng = Application.InputBox("请选择需要拆分的单元格区域", "单元格的处理", , , , , , 8) For Each a In rng s = a.Value a.Offset(0, 1) = Left(s, lsp) a.Offset(0, 2) = Mid(s, Int(lsp) + 1, Len(s) - rsp - lsp) a.Offset(0, 3) = Right(s, rsp) Next a End Sub 来看看代码实现的效果 通过代码一次性拆分了所有的数据,更加的合理化,直接输入收尾保留字符长度,中间有多少位数字都可以自动拆分出来,比Excel自带的分列功能不知道灵活多少倍 代码解析今天的代码核心有两个,一个是split方法,另外一个就是文本的处理函数,我们来一个个的分析 首先split方法 其实这个方法之前讲解单元格的拆分的时候就已经分享过了,通过split方法得到的结果是一个数组 本节案例比较简单,我们是直接输入收尾保留的数字的,所以结果只有两个,直接带入变量中,无需在此构造循环 lsp = Split(sp, ",")(0) rsp = Split(sp, ",")(1) lsp代表的左边要保留字数,rsp代表的是右边要保留的字数 在输入的时候也提示要用逗号隔开,所以我们split的时候是用逗号来进行拆分的 来看看代码执行的效果 拆分之后,我们也是得到了想要的结果,前面4个字符,后面3个字符 然后就可以拆分了,之前我们拆分单元格也是用split,那今天还可以用split嘛? 很明显场景不同,不能用这个方法了,我们今天用文本处理函数,left,right,mid a.Offset(0, 1) = Left(s, lsp) a.Offset(0, 3) = Right(s, rsp) 先处理简单的,左右两边的,两个参数,第一个参数是要拆分的文本,第二个是长度, 代表从左边/右边,拆分之后的结果 比较难的就是中间的拆分,中间用的是MID 从中间拆分难在多一个函数,MID(文本,起始位置,拆分长度) 文本我们有了,就是单元格的内容,s 起始位置也有,上面左边保留了4位,这里我们 拆分位置就是下一位,即第5位, 拆分长度呢?这里我们分开来说 1. 因为文本长度不一致,这里我们就需要灵活一点,用len()函数获得文本的长度 2. 然后减去右边保留的位置,注意这里是减去右边 3. 这样就完了嘛?不,还要继续减去左边的长度 最终这样得到的才是我们要拆分的中间文本的长度 终才可以得到我们想要结果。 ========================== 好了,明晚21:00,准时再见! 因为公众号没有留言功能(开的比较晚),所以建立一个线下微信群,主要为大家提供一个交流的平台,同时大家也可以提一些对公众号的意见和看法,大家一起学习,一起进步。 个人的小群,也不会很热闹,有问题抛下问题,大家互相帮助,不要发广告哦~ 因为近期加群人员太杂,需要入群的小伙伴可以先加我微信,备注“加群”我会拉进群,不备注,不加的哦~~ |
|