常用功能加载宏——单元格合并

时间:2022-07-22
本文章向大家介绍常用功能加载宏——单元格合并,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
  • 合并单元格

使用Excel,单元格合并是常用的功能,系统带的合并功能是仅仅保留左上角唯一一个单元格的内容,实际工作中可能会存在需要合并单元格,同时要把内容也合并的需求

  • 取消合并

另外一个经常碰到的情况是,实际工作中经常收到外部数据,很多人喜欢将一样的内容合并在一起,这样虽然好看,但是对于数据统计来说是非常不方便的,需要取消合并,并且把内容填充到所有单元格

效果如下:

创建两个Ribbon菜单按钮,首先在customUI.xml中增加两行代码:

    <group id="GroupRange" label="单元格">
      <button id="rbbtnMergeRange" label="合并&#13;" size="large" supertip="合并单元格,同时合并所有单元格的文本" onAction="rbbtnMergeRange" imageMso="ReviewCombineRevisions"/>
      <button id="rbbtnUnMergeRange" label="取消合并&#13;" 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