活动单元格操作

来源:互联网 发布:古人能吃饱饭吗 知乎 编辑:程序博客网 时间:2024/04/28 00:28
1、判断单元格区域是否存在合并单元格

Range对象的MergeCells属性可以确定单元格区域是否包含合并单元格,如果该属性返回值为True,则表示区域包含合并单元格。
下面的代码判断单元格 A1是否包含合并单元格,并显示相应的提示信息。
  1. Sub IsMergeCell()
  2.     If Range("A1").MergeCells = True Then
  3.         MsgBox "包含合并单元格"
  4.     Else
  5.         MsgBox "没有包含合并单元格"
  6.     End If
  7. End Sub
复制代码
如果在指定区域中存在部分合并的单元格,如图 1所示,区域E8:I17中包含合并单元格区域F8:G9,H12:I13。判断这样一个单元格区域中是否包含合并单元格,可以使用下面的代码快速判断单元格区域中是否包含部分合并单元格,而不需要遍历单元格。

015_1.png 
图 1        包含部分合并单元格的区域
  1. Sub IsMerge()
  2.     If IsNull(Range("E8:I17").MergeCells) Then
  3.         MsgBox "包含合并单元格"
  4.     Else
  5.         MsgBox "没有包含合并单元格"
  6.     End If
  7. End Sub
复制代码
代码解析:
当单元格区域中同时包含合并单元格和非合并单元格时,MergeCells属性将返回Null,因此第2行代码通过该返回结果作为判断条件。
运行IsMerge过程结果如图 15 2所示。

015_2.png 
图 2        提示信息

2、合并单元格时连接每个单元格的文本

使用Excel的“合并及居中”按钮合并多个单元格区域时,Excel仅保留区域左上角单元格的内容,如果用户希望在合并如图 15 3所示单元格区域时,将各个单元格的内容连接起来保存在合并后的单元格区域中,则可以使用下面的代码。

015_3.png 
图 3        合并前单元格区域
  1. Sub Mergerng()
  2.     Dim StrMerge As String
  3.     Dim rng As Range
  4.     If TypeName(Selection) = "Range" Then
  5.         For Each rng In Selection
  6.             StrMerge = StrMerge & rng.Value
  7.         Next
  8.         Application.DisplayAlerts = False
  9.         Selection.Merge
  10.         Selection.Value = StrMerge
  11.         Application.DisplayAlerts = True
  12.     End If
  13. End Sub
复制代码
代码解析:
Mergerng过程将所选各个单元格的内容连接起来保存在合并后的单元格区域中。
第4行代码使用TypeName函数判断当前选定对象是否为Range对象,若是则继续执行代码。
第5行到第7行代码将当前选中区域的内容连接起来保存在字符串变量StrMerge中。
第8行代码将DisplayAlerts属性设置为False,禁止在合并多重数值区域时,Excel显示的警告信息,如图 4所示,以避免中断代码的运行。

015_4.png 
图 4        合并多重数值区域时警告信息

第9行代码使用Merge方法合并当前选定区域。应用于Range对象的Merge方法通过指定Range对象创建合并单元格,语法如下:
expression.Merge(Across)
参数expression是必需的,返回一个Range对象。
参数Across是可选的,如果该值为True,则将指定区域内的每一行合并为一个合并单元格。默认值为False。
第9行也可以使用下面的代码:
Selection.MergeCells = True
第10行代码将变量StrMerge的值赋给合并后的单元格。
运行Mergerng过程结果如图 5所示。

015_5.png 
图 5        合并单元格结果

3、合并内容相同的连续单元格

如果需要合并如图 6所示的工作表中B列中部门相同的连续单元格,可以使用下面的代码。

015_6.png 
图 6        需合并的工作表
  1. Sub Mergerng()
  2.     Dim IntRow As Integer
  3.     Dim i As Integer
  4.     Application.DisplayAlerts = False
  5.     With Sheet1
  6.         IntRow = .Range("A65536").End(xlUp).Row
  7.         For i = IntRow To 2 Step -1
  8.             If .Cells(i, 2).Value = .Cells(i - 1, 2).Value Then
  9.                 .Range(.Cells(i - 1, 2), .Cells(i, 2)).Merge
  10.             End If
  11.         Next
  12.     End With
  13.     Application.DisplayAlerts = True
  14. End Sub
复制代码
代码解析:
第7行到第11行代码,从最后一行开始,向上逐个单元格判断连续两个单元格的内容是否相同,如果相同则合并。
运行Mergerng过程后,结果如图 7所示。

015_7.png 
图 7 合并内容相同的连续单元格

4、取消合并单元格时在每个单元格中保留内容

如果需要取消如图 7所示的工作表中B列“部门”的合并单元格,并且各个单元格均保留原合并单元格的内容,可以使用下面的代码。
  1. Sub UnMerge()
  2.     Dim StrMer As String
  3.     Dim IntCot As Integer
  4.     Dim i As Integer
  5.     With Sheet1
  6.         For i = 2 To .Range("B65536").End(xlUp).Row
  7.             StrMer = .Cells(i, 2).Value
  8.             IntCot = .Cells(i, 2).MergeArea.Count
  9.             .Cells(i, 2).UnMerge
  10.             .Range(.Cells(i, 2), .Cells(i + IntCot - 1, 2)).Value = StrMer
  11.             i = i + IntCot - 1
  12.         Next
  13.     End With
  14. End Sub
复制代码
代码解析:
UnMerge过程取消工作表中B列中的合并单元格,并且各个单元格均保留原合并单元格的内容。
第7行代码取得B列每个合并单元格的内容。
第8行代码取得合并区域的单元格数量。
第9行代码使用UnMerge方法取消合并单元格。UnMerge方法将合并区域分解为独立的单元格,语法如下:
expression.UnMerge
第10行代码将原合并单元格的内容赋值给取消合并单元格后的区域。
第11行代码调整循环变量i的值,使下一次循环从下一个单元格区域开始。
运行UnMerge过程结果如图 6所示。
原创粉丝点击