Excel VBA 8.18单元内容拆分 VBA打造分列功能前景提要场景说明代码区代码解析

原标题:ExcelVBA8.18单元内容拆分VBA打造分列功能
前景提要在大家日常的工作中 , 想必一定会经常用到Excel的分列功能吧 , 主要是针对单元格的拆分 , 将单元格的内容按需拆分成几列 , 那么大家在使用的过程中 , 有没有想过如果用VBA要如何实现这样的功能呢?
很多小伙伴们肯定会想 , 既然Excel已经有了现成的功能 , 为什么我们还要去自己用代码写这个功能呢?
其实这是一个很简单的道理 , 既然要学习VBA , 自然是要学会每一个常用的小知识点 , 小知识点看起来不起眼 , 但是每一个功能都是有这些小知识点组成的 , 你不可能在代码执行的过程中 , 让她暂停几秒钟 , 给你时间去选择菜单栏的分列按钮和操作吧 。
所以秉着学好VBA的心态 , 我们来尝试着用VBA来写一个简单的分列功能
场景说明
Excel VBA 8.18单元内容拆分 VBA打造分列功能前景提要场景说明代码区代码解析
文章图片
这是我们模拟的简单数据 , 我们都知道可以通过Excel自带的分列功能来实现拆分单元格的操作

Excel VBA 8.18单元内容拆分 VBA打造分列功能前景提要场景说明代码区代码解析
文章图片
我们这里来看看VBA如何实现
说到文本的拆分 , 我们肯定首先想到的就是split方法了
没错 , 今天我们也就是利用split方法来仿造一个分列功能
代码区Subtest()
Excel VBA 8.18单元内容拆分 VBA打造分列功能前景提要场景说明代码区代码解析】DimrngAsRange,arr,aAsRange
Setrng=Application.InputBox("请选择需要拆分的单元格区域","单元格的处理",,,,,,8)
ForEachaInrng
Str1=rng.Text
arr=Split(Str1,"-")
ii=UBound(arr)+1
Fori=1Toii
rng.Offset(0,i)=arr(i-1)
Nexti
Nexta
EndSub
来看看代码实现的效果

Excel VBA 8.18单元内容拆分 VBA打造分列功能前景提要场景说明代码区代码解析
文章图片
这个效果和我们直接用Excel的分列功能得到的结果是一样的
代码解析今天的代码写起来其实很简单 , 并不多 , 只有短短的10+行代码
但是这里涉及了一个重要的VBA知识 , 就是数组
前面的代码我们直接跳过 , 来到今天的关键代码
arr=Split(Str1,"-")
str1就是我们要拆分的单元格的文本 , 通过split方法 , 我们得到了一个什么样的结果呢?
来调试下看看

Excel VBA 8.18单元内容拆分 VBA打造分列功能前景提要场景说明代码区代码解析
文章图片
这是一个数组的结构 , split将文本按照拆分符拆开之后 , 得到的就是一个数组
而这里我们设置一个变量arr来承载这个数字
从上面的截图中可以看到 , arr是从0开始的 , 他实际上有4个部分 , 但是因为从0开始 , 所以他的最大下标只有3.
知道这个有什么用处呢?
我们拆分了单元格之后 , 需要填充单元格 , 那是不是需要将结果填充到后面的单元格中 , 那要填充多少个单元格呢?
这就需要用到最大下标了 。
ii=UBound(arr)+1
这里获得的就是最大下标 , 为什么要+1?
因为前面已经说了 , 数组的下标是从0开始的 , 所以最终的结果要+1
有了内容 , 又有了需要填充的单元格区域 , 就可以直接遍历循环填充了 。
Fori=1Toii
a.Offset(0,i)=arr(i-1)
Nexti