VBA技巧15合并单元格操作..doc
文本预览下载声明
合并单元格操作
判断单元格区域是否存在合并单元格
Range对象的MergeCells属性可以确定单元格区域是否包含合并单元格,如果该属性返回值为True,则表示区域包含合并单元格。
下面的代码判断单元格 A1是否包含合并单元格,并显示相应的提示信息。
#001 Sub IsMergeCell()
#002 If Range(A1).MergeCells = True Then
#003 MsgBox 包含合并单元格
#004 Else
#005 MsgBox 没有包含合并单元格
#006 End If
#007 End Sub
如果在指定区域中存在部分合并的单元格,如图 151所示,区域E8:I17中包含合并单元格区域F8:G9,H12:I13。判断这样一个单元格区域中是否包含合并单元格,可以使用下面的代码快速判断单元格区域中是否包含部分合并单元格,而不需要遍历单元格。
图 151 包含部分合并单元格的区域
#001 Sub IsMerge()
#002 If IsNull(Range(E8:I17).MergeCells) Then
#003 MsgBox 包含合并单元格
#004 Else
#005 MsgBox 没有包含合并单元格
#006 End If
#007 End Sub
代码解析:
当单元格区域中同时包含合并单元格和非合并单元格时,MergeCells属性将返回Null,因此第2行代码通过该返回结果作为判断条件。
运行IsMerge过程结果如图 152所示。
图 152 提示信息
合并单元格时连接每个单元格的文本
使用Excel的“合并及居中”按钮合并多个单元格区域时,Excel仅保留区域左上角单元格的内容,如果用户希望在合并如图 153所示单元格区域时,将各个单元格的内容连接起来保存在合并后的单元格区域中,则可以使用下面的代码。
图 153 合并前单元格区域
#001 Sub Mergerng()
#002 Dim StrMerge As String
#003 Dim rng As Range
#004 If TypeName(Selection) = Range Then
#005 For Each rng In Selection
#006 StrMerge = StrMerge rng.Value
#007 Next
#008 Application.DisplayAlerts = False
#009 Selection.Merge
#010 Selection.Value = StrMerge
#011 Application.DisplayAlerts = True
#012 End If
#013 End Sub
代码解析:
Mergerng过程将所选各个单元格的内容连接起来保存在合并后的单元格区域中。
第4行代码使用TypeName函数判断当前选定对象是否为Range对象,若是则继续执行代码。
第5行到第7行代码将当前选中区域的内容连接起来保存在字符串变量StrMerge中。
第8行代码将DisplayAlerts属性设置为False,禁止在合并多重数值区域时,Excel显示的警告信息,如图 154所示,以避免中断代码的运行。
图 154 合并多重数值区域时警告信息
第9行代码使用Merge方法合并当前选定区域。应用于Range对象的Merge方法通过指定Range对象创建合并单元格,语法如下:
expression.Merge(Across)
参数expression是必需的,返回一个Range对象。
参数Across是可选的,如果该值为True,则将指定区域内的每一行合并为一个合并单元格。默认值为False。
第9行也可以使用下面的代码:
Selection.MergeCells = True
第10行代码将变量StrMerge的值赋给合并后的单元格。
运行Mergerng过程结果如图 155所示。
图 155 合并单元格结果
合并内容相同的连续单元格
如果需要合并如图 156所示的工作表中B列中部门相同的连续单元格,可以使用下面的代码。
图 156 需合并的工作表
#001 Sub Mergerng()
#002 Dim IntRow As Integer
#003 Dim i As Integer
显示全部