文章背景: 工作中,有时需要判断单元格区域内是否存在合并单元格,这时,可以用到Range.MergeCells
属性。
合并单元格只有左上角的单元格包含数据,其他为空。
1 Range.MergeCells
属性
Range.MergeCells
True if the range contains merged cells. Read/write Variant.
- 当该Range是一个完成合并的区域时,该属性返回True;
- 当该Range完全不包含合并单元格时,该属性返回False;
- 当该Range部分包含合并单元格时,该属性返回Null。
Null是VBA中的一个特殊的数值,可以近似地将其理解为无效数据。判断一个变量是否为Null时,需要使用函数IsNull
。
示例:If IsNull(Range1.MergeCells) = True Then…
Range.MergeCells
属性可读可写,把某个区域的单元格合并的代码可以写成Range.MergeCells = True
2 示例
VBA示例代码:
代码语言:javascript复制Option Explicit
Sub mergeCells()
'测试合并单元格的属性
Dim wt As Worksheet, flag, flag1, flag2, flag3, flag4, flag5
Set wt = ThisWorkbook.Worksheets("Sheet1")
flag = wt.Range("B3").mergeCells 'Return True
flag1 = wt.Range("B6:B8").mergeCells 'Return True
flag2 = wt.Range("B6:B9").mergeCells 'Return Null
flag3 = wt.Range("B3:C4").mergeCells 'Return Null
flag4 = wt.Range("B2:B4").mergeCells 'Return Null
flag5 = wt.Range("B2").mergeCells 'Return False
Exit Sub
End Sub
(1)对于flag,单元格区域B3
只有一个合并单元格,返回True;
(2)对于flag1,单元格区域B6:B8
,返回True,这个结果较难理解。因为单元格区域B6:B7
是一个合并单元格,B8:B9
是另一个合并单元格。换句话说,单元格区域B6:B8
,包含一个完成合并的区域,并且不包含未合并的单元格。
(3)对于flag2,单元格区域B6:B9
包含两个完成合并的单元格区域,返回Null。
(4)对于flag3,单元格区域B3:C4
包含两个完成合并的单元格区域,返回Null。
(5)对于flag4,单元格区域B2:B4
部分包含合并的单元格,返回Null。
(6)对于flag5,单元格区域B2
完全不包含合并单元格,返回False。
参考资料:
[1] VBA编程知识点(15)——合并单元格 - 知乎 (zhihu.com)(https://zhuanlan.zhihu.com/p/91271337)
[2] Range.MergeCells 属性 (Excel) | Microsoft Learn(https://learn.microsoft.com/zh-cn/office/vba/api/excel.range.mergecells)
[3] 常用功能加载宏——快速定位合并单元格(https://cloud.tencent.com/developer/article/1669659)