在Excel中,我们经常会用到合并单元格操作,使表格更加美观易读。如下图所示的工作表,标题位于单元格A1,如果需要将标题跨列居中,那么先选择单元格区域A1:G1,然后单击“合并后居中”按钮。
使用录制宏录制上述操作的代码如下:
Sub Macro1()
'
' Macro1Macro
' 由完美Excel录制
'
Range('A1:G1').Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
End Sub
现在我们知道,宏录制器录制了很多无用的代码。因此,我们可以将其录制的代码简化如下,达到同样的效果:
Sub testMerge1()
'合并单元格
Range('A1:G1').Merge
'将单元格中的内容居中
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
End Sub
Merge方法的语法
Range对象.Merge(Across)
说明:
将指定的Range对象创建合并单元格。
合并后的单元格值指定为单元格区域左上角的单元格的值。
参数Across可选。设置为True,则指定单元格区域的每行的单元格分别合并作为合并单元格。默认值为False。例如,下面的代码,将参数Across设置为True:
Range('A1:C4').MergeAcross:=True
分别合并单元格区域A1:C4中的各行,如下图所示
合并单元格中不能输入数组公式,否则会导致出错:运行时错误’1004’:不能设置类Range的FormulaArray属性。
相关的方法和属性
UnMerge方法
将合并的单元格区域分成单个单元格,即取消单元格合并。
MergeArea属性
只读。返回一个Range对象,代表包含指定单元格的合并单元格区域。如果指定单元格不在合并单元格区域中,该属性返回指定单元格。
注意,MergeArea属性仅适用于单元格区域中单个单元格。
MergeCells属性
如果单元格或单元格区域包含在合并单元格中,则返回True。
注意,当选择包含合并单元格的区域时,结果选区可能与试图选择的区域不同。使用Address属性来核查所选单元格区域的地址。
示例1:判断单元格是否为合并单元格并取消单元格合并
下面的代码先判断单元格是否在合并单元格中,如果是则取消单元格合并。
Sub testMerge3()
With Range('A1')
'是否A1包含在合并单元格中
If .MergeCells Then
'如果是,返回合并单元格区域
'并取消单元格合并
.MergeArea.UnMerge
Else
MsgBox '没有合并单元格!'
End If
End With
End Sub
示例2:判断单元格是否包含在合并单元格区域
除了示例1中使用MergeCells属性外,还可以使用下面的介绍方法判断是否为合并单元格。
如下图所示的工作表区域,可以看出A1是单独的单元格,而A2则包含在合并单元格中。
代码及执行的效果如下图所示:
示例3:合并内容相同的单元格
如下图所示,需要将列A中内容相同的单元格合并。
代码如下:
说明:
代码中,使用了AdvancedFilter方法获取列A中不重复的值。关于AdvancedFilter方法的使用请参见《ExcelVBA解读(53):高级筛选——AdvancedFilter方法》。
代码中,先使用了Application对象的DisplayAlerts属性关闭Excel的弹出警告框功能。若不关闭,那么在合并都含有数据的单元格时,会弹出下图所示警告框,导致代码运行中断。
提示:通常,合并单元格会给以后数据的使用带来不便的影响,因此,建议在数据工作表中尽量不使用合并单元格,在最后呈现结果的报表工作表中可以合并单元格,以简化或美化工作表。
如果您对本文介绍的内容还有什么好的示例,欢迎发送邮件给我:xhdsxfjy@163.com
也可以在本文下方留言,提出您的看法或建议。
本文属原创文章,转载请联系我或者注明出处。
联系客服