Excel VBA 8.20 优化Excel分列功能,长度拆分不用数

优化Excel分列功能,长度拆分不用数


点击上方“Excel和VBA”,选择“置顶公众号”

致力于原创分享Excel的相关知识,源码,源文件打包提供

一起学习,一起进步~~


之前我们学习了利用VBA来拆分单元格的方法,主要还是优化Excel分列功能的,这不,又有小伙伴们反馈,分列功能有一个按照长度拆分单元格的功能,是不是可以优化下,在平时按照长度拆分的时候,我还要一个个的数,到多少个字段停止,而且分列功能的那个线条拖来拖去也比较麻烦,有没有办法直接输入一个数字就进行拆分呢?

好,安排上

场景说明

这是我们今天构造的数据源,今天要尝试的是按照单元格长度进行拆分,我们就准备了一些长度不同的数据,这些数据你如果想要通过单元格的分列功能来操作的话,估计有点难度

Excel自带的分列功能,按照长度拆分的话,至少有一个大前提,就是数据的格式是完全一样的,才能够一次针对大量的数据进行拆分,如果数据长度不一样,那么就会出现上面动图的尴尬,我想要取每个数据的后面三位,但是因为单元格内容不同,没有办法一次性全部取出来,既然如此,VBA可以登场了

代码区

Sub testc()Dim rng As Range, a  As Range, spsp = 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 aEnd 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,准时再见!

因为公众号没有留言功能(开的比较晚),所以建立一个线下微信群,主要为大家提供一个交流的平台,同时大家也可以提一些对公众号的意见和看法,大家一起学习,一起进步。

个人的小群,也不会很热闹,有问题抛下问题,大家互相帮助,不要发广告哦~

因为近期加群人员太杂,需要入群的小伙伴可以先加我微信,备注“加群”我会拉进群,不备注,不加的哦~~

(0)

相关推荐