Excel中的合并单元格是个很奇葩的功能,有的用户非常喜欢这个功能,但是合并单元格的功能有时差强人意,处理起来非常麻烦,从数据处理的角度考虑,不推荐使用合并单元格。
既然Excel提供了合并单元格功能,那么用户就可能会使用这个功能,例如A1:B4为合并单元格区域,其中的文字内容具有不同的格式,现在需要将其内容和格式拷贝到D1单元格,目标区域也是一个合并单元格区域,使用Excel的拷贝与粘贴,只能把文字拷贝过去,字体格式丢失了,如下图所示。
Sub CopyMerge(srcCel As Range, desCel As Range)
Dim srcRng, desRng
Set srcRng = srcCel.MergeArea
Set desRng = desCel.MergeArea
If srcCel.MergeCells Then srcCel.UnMerge
If desCel.MergeCells Then desCel.UnMerge
srcCel.Copy desCel
Application.DisplayAlerts = False
srcRng.Merge
desRng.Merge
Application.DisplayAlerts = True
End Sub
Sub demo()
Call CopyMerge([a1], [g1])
End Sub
【代码解析】
第1~12行代码为自定义过程实现拷贝内容,第一个参数为源单元格,第二个参数为目标单元格。
第3行代码获取源单元格的合并单元格区域对象引用。
第4行代码获取目标单元格的合并单元格区域对象引用。
第5行代码判断源单元格是否为合并单元格,如果是的话,则取消合并单元格。
第6行代码使用类似方式除了目标单元格。
第7行代码将源单元格内容拷贝至目标单元格(单个单元格)。
第8行代码屏蔽系统提示信息。
第9行代码合并源单元格区域。
第10行代码合并目标单元格区域。
第11行代码合并目标单元格区域。
第13~15行代码调用自定义函数拷贝合并单元格,结果如下图所示。