Excel VBA 8.18单元内容拆分 VBA打造分列功能
单元内容拆分 VBA打造分列功能
点击上方“Excel和VBA”,选择“置顶公众号”
致力于原创分享Excel的相关知识,源码,源文件打包提供
一起学习,一起进步~~
前景提要
在大家日常的工作中,想必一定会经常用到Excel的分列功能吧,主要是针对单元格的拆分,将单元格的内容按需拆分成几列,那么大家在使用的过程中, 有没有想过如果用VBA要如何实现这样的功能呢?
很多小伙伴们肯定会想,既然Excel已经有了现成的功能,为什么我们还要去自己用代码写这个功能呢?
其实这是一个很简单的道理,既然要学习VBA,自然是要学会每一个常用的小知识点,小知识点看起来不起眼,但是每一个功能都是有这些小知识点组成的,你不可能在代码执行的过程中,让她暂停几秒钟,给你时间去选择菜单栏的分列按钮和操作吧。
所以秉着学好VBA的心态,我们来尝试着用VBA来写一个简单的分列功能
场景说明
这是我们模拟的简单数据,我们都知道可以通过Excel自带的分列功能来实现拆分单元格的操作
我们这里来看看VBA如何实现
说到文本的拆分,我们肯定首先想到的就是split方法了
没错,今天我们也就是利用split方法来仿造一个分列功能
代码区
Sub test()
Dim rng As Range, arr, a As Range
Set rng = Application.InputBox("请选择需要拆分的单元格区域", "单元格的处理", , , , , , 8)
For Each a In rng
Str1 = rng.Text
arr = Split(Str1, "-")
ii = UBound(arr) + 1
For i = 1 To ii
rng.Offset(0, i) = arr(i - 1)
Next i
Next a
End Sub
来看看代码实现的效果
这个效果和我们直接用Excel的分列功能得到的结果是一样的
代码解析
今天的代码写起来其实很简单,并不多,只有短短的10+行代码
但是这里涉及了一个重要的VBA知识,就是数组
前面的代码我们直接跳过,来到今天的关键代码
arr = Split(Str1, "-")
str1就是我们要拆分的单元格的文本,通过split方法,我们得到了一个什么样的结果呢?
这是一个数组的结构,split将文本按照拆分符拆开之后,得到的就是一个数组
而这里我们设置一个变量arr来承载这个数字
从上面的截图中可以看到,arr是从0开始的,他实际上有4个部分,但是因为从0开始,所以他的最大下标只有3.
知道这个有什么用处呢?
我们拆分了单元格之后,需要填充单元格,那是不是需要将结果填充到后面的单元格中,那要填充多少个单元格呢?
这就需要用到最大下标了。
ii = UBound(arr) + 1
这里获得的就是最大下标,为什么要+1?
因为前面已经说了,数组的下标是从0开始的,所以最终的结果要+1
有了内容,又有了需要填充的单元格区域,就可以直接遍历循环填充了。
For i = 1 To ii a.Offset(0, i) = arr(i - 1)
Next i