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

常用功能加载宏——单元格数字转变

作者头像
xyj
发布2020-07-28 11:42:27
3730
发布2020-07-28 11:42:27
举报
文章被收录于专栏:VBA 学习

对于会计人员来说,有一个经常要用到的操作,那就是把数字转变为万元为单位的、或者是把万元为单位的转变为普通的,一般的操作可能是:

  • 在新的一列使用公式*10000或者/10000
  • 然后把结果数值粘贴回去

Excel用的更熟练的可能是:

  • 在一个单元格输入10000,然后复制这个单元格
  • 选中需要转换的数字区域
  • 选择性粘贴-乘或者除-确定

后面这个其实已经很方便了,但是比起点一点菜单就完成转变来说,还是麻烦了那么一点点:

首先在customUI.xml中增加代码:

代码语言:javascript
复制
        <menuSeparator id="rbSepNumber01" title="================="/>
        <button id="rbbtnNumChange1" label="×10000" onAction="rbbtnNumChange" imageMso="WrapText" tag="10000"/>   
        <button id="rbbtnNumChange2" label="÷10000" onAction="rbbtnNumChange" imageMso="WrapText" tag="0.0001"/>   

这里使用了一个tag属性,目的是为了共用一个onAction,因为除10000也就相当于乘0.0001.

回调函数:

代码语言:javascript
复制
Sub rbbtnNumChange(control As IRibbonControl)
    MRange.NumChange VBA.CDbl(control.Tag)
End Sub

函数实现:

代码语言:javascript
复制
Sub NumChange(d As Double)
    Dim selectRng As Range
    Dim arr As Variant
    Dim i As Long, j As Long
    
    '确保选中的是单元格
    If TypeName(Selection) = "Range" Then
        Set selectRng = Selection
        If selectRng.Areas.Count > 1 Then
            MsgBox "未处理多重区域情况"
            Exit Sub
        End If
        
        If selectRng.Cells.Count > 1 Then
            arr = selectRng.Value
            
            For i = 1 To UBound(arr)
                For j = 1 To UBound(arr, 2)
                    arr(i, j) = VBA.CDbl(arr(i, j)) * d
                Next
            Next
            
            selectRng.Value = arr
        Else
            selectRng.Value = VBA.CDbl(selectRng.Value) * d
        End If
    End If
    
    Set selectRng = Nothing
End Sub
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-21,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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