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

2020-07-28 11:42:27 浏览数 (1)

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

  • 在新的一列使用公式*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

0 人点赞