一文搞清楚ExcelVBA中的合并单元格
在我们日常的Excel表格处理中,为了版面的整洁、美观,往往对表格的一些单元格进行合并处理。今天这篇文章就专门讲一下在VBA中如何对合并单元格进行一系列操作。
▎合并单元格写入值
如下图,如果我们想向合并单元格内部写值,我们应该写:
Sub test()
Range("E4").Value = 1
End Sub
结论:向合并单元格写入值,按合并单元格左上角的单元格地址写入即可。如果你强制的向E5单元格写值,最终是看不到任何效果的(取消合并,也没有任何效果)。
▎合并单元格插入图片
如果向合并单元格中插入图片,并且使图片填充满整个单元格。我们应该这样写:
Sub 合并单元格插入图片()
Dim rng As Range
Set rng = Range("e4").MergeArea
pic = ThisWorkbook.Path & "\1.png"
ActiveSheet.Shapes.AddPicture pic, True, True, rng.Left, rng.Top, rng.Width, rng.Height
End Sub
结论:
MergeArea 属性:返回包含指定单元格的合并单元格区域。可以利用这个特性获取到合并单元格区域的完整地址。
拓展一下,已知合并单元格中任意一个单元格的地址,获取合并单元格的值,我们这样写:
Range("E3").MergeArea.Cells(1, 1)就返回了合并区域的值
▎用代码合并单元格
如果我们想用代码来合并单元格,我们这样写:
Sub 合并与取消单元格()
Range("E4:F7").Merge
Range("E4:F7").UnMerge
End Sub
判断某个单元格是否是合并单元格,我们这么写:
Sub 判断是否是合并单元格()
Range("E4:F7").Merge
If Range("E5").MergeCells Then
MsgBox "是合并单元格"
Else
MsgBox "不是合并单元格"
End If
End Sub
▎获取合并单元格的一些特定属性
如果我们想获取合并单元格的总行数、总列数。我们这样写:
Range("B3").MergeArea.ROW 返回了合并区域第一行的行标
Range("B3").MergeArea.column返回了合并区域第一列的行标
Range("B3").MergeArea.rows.Count 返回了合并区域总行数
Range("B3").MergeArea.columns.Count 返回了合并区域总列数
▎一个小趣味的问题
如果我们采用格式刷的方式,制作合并单元格。那么会出现隐藏数据。比如下图中,取消合并单元格之后,会多出来一部分数据。
他的根源是因为这个合并单元格是格式刷刷来的。