单元内容拆分 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 |
|