取消合并单元格 并按需填充不同数据点击上方“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 这就是上面这一部分代码每一部分的作用和执行的效果。 ========================== |
|