VBA: 判断单元格区域内是否存在合并单元格

2023-10-22 17:16:47 浏览数 (2)

文章背景: 工作中,有时需要判断单元格区域内是否存在合并单元格,这时,可以用到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)

0 人点赞