Excel VBA 8.13不同数据合并单元会导致数据缺失?今天帮你解决这个问题
不相邻-相同数据合并单元格 打破Excel的限制
点击上方“Excel和VBA”,选择“置顶公众号”
致力于原创分享Excel的相关知识,源码,源文件打包提供
一起学习,一起进步~~
前景提要
最近一直在分享一些合并单元格的场景,有小伙伴在后台留言提供了一个新的场景,和我们之前讨论的合并单元格的场景并不相同,我们之前合并单元格都是强调相同数据的合并,但是他的这个场景都是在不同数据之间的合并,一起来看看
场景说明
来看看我们今天的模拟数据
这里就是完全借用上节课的数据源,我们今天要合并的是不同单元格的数据,假设我们希望合并这两个单元格
从上面的截图中我们可以看到,这两个单元格的数据是不相同的,如果我们这个时候利用Excel自带的合并单元格的功能,会有怎么样的效果呢?
从上面的东图中来看,虽然是成功的合并了单元格,但是造成了数据的缺失,本来是两个不同数据的,但是直接合并单元格之后,就会导致另外一个数据消失了。
这样的合并效果明显差强人意,那么如何能够实现不同数据的单元格在合并的同时,保留所有的数据呢?
这个时候我们就需要请出VBA了
代码区
Sub test5()
Dim rng As Range
Application.DisplayAlerts = False
Set rng = Application.InputBox("请选择合并的区域", "合并不相同内容", , , , , , 8)
ss = MsgBox("此操作不可逆,请确认是否要执行?", vbYesNo)
If ss = vbYes Then
rng.Merge
Else
Exit Sub
End If
End Sub
来看看代码实现的效果
从上面的动图中,我们可以看到,代码成功的实现了单元格的合并,同时保留了所有的单元格数据,真正意义上的实现了单元格的合并,对数据内容并没有任何的改变
代码解析
成功的实现了效果,那我们来拆解下代码
Set rng = Application.InputBox("请选择合并的区域", "合并不相同内容", , , , , , 8)
这里依然是通过申明变量的方式得到我们需要执行操作合并单元格的区域
熟悉VBA的小伙伴们都知道,VBA代码执行,常规情况下是不可能的,无法通过ctrl+z来实现撤销操作的
熟悉VBA的小伙伴们都知道,VBA代码执行,常规情况下是不可能的,无法通过ctrl+z来实现撤销操作的所以一旦通过VBA执行了单元格的合并,是没有办法复原的
所以我们在写代码的时候,也要考虑这个问题,告知代码的使用者会有这样的情况,
这里我们通过msgbox的方法,构造一个简单的用户交互窗体,让用户来选择
那么这个弹窗是如何实现的呢?
ss = MsgBox("此操作不可逆,请确认是否要执行?", vbYesNo)
就是他
弹窗有两个选项,一个是yes,一个是NO
使用者在使用的过程中就会根据自己的需要进行选择,代码只需要根据选择的结果来进行操作
If ss = vbYes Then
*****'如果选择YES,则执行 这段操作
Else
Exit Sub'如果选择NO,则执行这段操作
End If
然后就来到今天的重点了,合并单元格并保留数据
合并单元格很简单,相信大家都会了。
rng.Merge
但是数据如何保留呢?
我们这里用一个土办法
遍历循环选择的单元格区域,将每个单元格的数据先保留起来,赋值给一个变量
For Each rng1 In rng
rngtext = rngtext & rng1
Next rng1
这里的rngtext就是那个变量
最后我们在完成了单元格合并之后,将这个合并之后的单元格进行赋值,让合并之后的单元格的内容就是rngtext
rng.Value = rngtext
最终就得到了我们看到的 效果了。
==========================
好了,明晚21:00,准时再见!
因为公众号没有留言功能(开的比较晚),所以建立一个线下微信群,主要为大家提供一个交流的平台,同时大家也可以提一些对公众号的意见和看法,大家一起学习,一起进步。
因为近期加群人员太杂,需要入群的小伙伴可以先加我微信,备注“加群”我会拉进群,不备注,不加的哦~~