Excel VBA 8.16 取消合并单元格 并按需填充不同数据
取消合并单元格 并按需填充不同数据
点击上方“Excel和VBA”,选择“置顶公众号”
致力于原创分享Excel的相关知识,源码,源文件打包提供
一起学习,一起进步~~
前景提要
取消了单元格的合并操作之后,最常见的操作就是填充单元格数据,比方说我们上节所分享的那样,但是有时候,我们碰到的单元格内容又不是完全相同的,比方说我们之前所分享的8.13,他合并的单元格内容是完全不相同的,在拆分了合并单元格之后,填充相同的数据是不行的,那么这样的情况下我们要如何进行拆分之后的填充呢?
场景说明
这是我们今天构造的数据源,从上面的模拟数据来看,主要体现了常见的合并单元格中不同数据合并在一起的情况,有横向合并的,也有纵向合并的,那么我们今天要拆解的合并单元格就有点复杂了,拆解很简单,直接用UNmerge就可以实现了,但是拆解之后单元格内容的填充就需要一点小技巧了
我今天是搭配数组的方式来实现的,大家可以参考下。
代码区
Sub TEST6()
Dim rng As Range, a As Range, arr, aa As Range, i&
Set rng = Application.InputBox("请选择合并的区域", "合并不相同内容", , , , , , 8)
For Each a In rng
If a.MergeCells = True Then
s = a.Value
arr = Split(s, "-")
a.Select
i = 0
With Selection
a.UnMerge
For Each aa In Selection
aa.Value = arr(i)
i = i + 1
Next aa
End With
End If
Next a
End Sub
来看看代码实现的效果
从结果上来看,我们很好的实现了我们的目的和效果
比较下拆分前后的两个数据的样式,效果还是
代码解析
今天我们重点来解决下如何实现拆分单元格之后,填充不同的数据的
我们来看看代码
If a.MergeCells = True Then
s = a.Value
arr = Split(s, "-")
a.Select
i = 0
With Selection
a.UnMerge
For Each aa In Selection
aa.Value = arr(i)
i = i + 1
Next aa
End With
End If
首先判断是否存在合并单元格,这是起手式
如果存在合并单元的话,我们用一个土方法,先选中它,即select 方法
然后我们就可以针对合并单元格区域进行操作了。
先取消取消
a.UnMerge
然后,我们开始循环这个区域,哪个区域,a这个区域,因为取消了单元格的合并,如果直接循环a这个区域的话,是不对的
因为取消了合并单元格之后,a实际上就是原来合并单元格的左上角的第一个合并单元而已
所以我们前面才需要用一个select方法
这样我们循环的区域就是selection,即我们前面已经选中的合并单元格区域了。
有了区域之后,我们就可以填充了。
我们再来观察下数据,因为数据不同,但是有一个明显的连接符,我们就可以利用连接符进行文本的拆分
arr = Split(s, "-")
split方法拆分之后得到的结果是一个数组,来看看代码实际执行的效果
正好是一个数字,然后我们就可以在循环遍历selection这个区域的同时,循环遍历数据就可以将对应的数据填充到相应的单元格了。
With Selection
a.UnMerge
For Each aa In Selection
aa.Value = arr(i)
i = i + 1
Next aa
End With
这就是上面这一部分代码每一部分的作用和执行的效果。
==========================