前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >常用功能加载宏——单元格合并

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

作者头像
xyj
发布2020-07-28 11:45:53
6760
发布2020-07-28 11:45:53
举报
文章被收录于专栏:VBA 学习
  • 合并单元格

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

  • 取消合并

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

效果如下:

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

代码语言:javascript
复制
    <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编辑器,编辑两个按钮的回调函数:

代码语言:javascript
复制
Sub rbbtnMergeRange(control As IRibbonControl)
    Call MRange.MergeRngAndValue
End Sub


Sub rbbtnUnMergeRange(control As IRibbonControl)
    Call MRange.UnMergeAndFill
End Sub

插入模块,命名为MRange,实现二个过程:

代码语言:javascript
复制
'合并单元格和内容
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
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 VBA 学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档