分享

Excel VBA 8.16 取消合并单元格 并按需填充不同数据

 Excel和VBA 2021-06-29

取消合并单元格 并按需填充不同数据


点击上方“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 IfNext aEnd 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 aaEnd With

这就是上面这一部分代码每一部分的作用和执行的效果。

==========================

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多