使用Excel,单元格合并是常用的功能,系统带的合并功能是仅仅保留左上角唯一一个单元格的内容,实际工作中可能会存在需要合并单元格,同时要把内容也合并的需求。
另外一个经常碰到的情况是,实际工作中经常收到外部数据,很多人喜欢将一样的内容合并在一起,这样虽然好看,但是对于数据统计来说是非常不方便的,需要取消合并,并且把内容填充到所有单元格。
效果如下:
创建两个Ribbon菜单按钮,首先在customUI.xml中增加两行代码:
<group id="GroupRange" label="单元格">
<button id="rbbtnMergeRange" label="合并 " size="large" supertip="合并单元格,同时合并所有单元格的文本" onAction="rbbtnMergeRange" imageMso="ReviewCombineRevisions"/>
<button id="rbbtnUnMergeRange" label="取消合并 " supertip="取消单元格合并,并填充文本" size="large" onAction="rbbtnUnMergeRange" imageMso="CreateDiagram"/>
</group>
写入customUI.xml后,打开VBA编辑器,编辑两个按钮的回调函数:
Sub rbbtnMergeRange(control As IRibbonControl)
Call MRange.MergeRngAndValue
End Sub
Sub rbbtnUnMergeRange(control As IRibbonControl)
Call MRange.UnMergeAndFill
End Sub
插入模块,命名为MRange,实现二个过程:
'合并单元格和内容
Sub MergeRngAndValue()
Dim rng As Range, selectRng As Range
Dim rngValue As Variant
'确保选中的是单元格
If TypeName(Selection) = "Range" Then
Set selectRng = Selection
'将单元格的内容连接起来,实际看个人需要,可以增加回车符之类的
For Each rng In selectRng
rngValue = rngValue & rng.Value
Next rng
'清空内容,为了防止合并的时候进行提示
selectRng.ClearContents
'合并单元格
selectRng.Merge
'赋值
selectRng.Value = rngValue
End If
Set rng = Nothing
Set selectRng = Nothing
End Sub
'取消合并,并填充文本
Sub UnMergeAndFill()
Dim rng As Range, selectRng As Range
Dim rngValue As Variant
'确保选中的是单元格
If TypeName(Selection) = "Range" Then
Set selectRng = Selection
For Each rng In selectRng
'判断是否是合并单元格
If rng.MergeCells Then
'记录单元格内容
rngValue = rng.Value
'获取合并单元格的区域
Set rng = rng.MergeArea
'取消合并
rng.UnMerge
'单元格区域赋值
rng.Value = rngValue
End If
Next rng
End If
Set rng = Nothing
Set selectRng = Nothing
End Sub