博客
关于我
巧用VBA统一数字单位
阅读量:271 次
发布时间:2019-03-03

本文共 1725 字,大约阅读时间需要 5 分钟。

实例需求:A列中有不规范数据,数据单位不一致,现需要将数据统一为“万”为单位,如B列所示。

先看一下数据规律,有如下三类:

  • 无单位数据,如A1
  • 单位为“万”,如A2
  • 单位为“亿”,如A3
    在这里插入图片描述
Sub demo()    Dim r As Range    Dim arr, lstchar    Dim i As Integer    Set r = [A1].CurrentRegion    arr = r.Value    For i = LBound(arr) To UBound(arr)        lstchar = Right(arr(i, 1), 1)        If lstchar = "亿" Then            arr(i, 1) = CStr(Val(arr(i, 1)) * 10000) & "万"        ElseIf VBA.IsNumeric(lstchar) Then            arr(i, 1) = CStr(Val(arr(i, 1)) / 10000) & "万"        End If    Next    r.Offset(0, 1).Value = arrEnd Sub

运行代码看结果,貌似不错,单元B1单元格的数据与要求略有不同,缺少了小数点之前的零。

在这里插入图片描述
升级一下代码解决这个问题。

Sub demo()    Dim r As Range    Dim arr, lstchar    Dim i As Integer    Set r = [A1].CurrentRegion    arr = r.Value    For i = LBound(arr) To UBound(arr)        lstchar = Right(arr(i, 1), 1)        If lstchar = "亿" Then            arr(i, 1) = CStr(Val(arr(i, 1)) * 10000) & "万"        ElseIf VBA.IsNumeric(lstchar) Then            arr(i, 1) = CStr(Val(arr(i, 1)) / 10000)            n = InStr(arr(i, 1), ".")            If n Then                arr(i, 1) = FormatNumber(arr(i, 1), Len(arr(i, 1)) - n, vbTrue, , vbFalse) & "万"            Else                arr(i, 1) = arr(i, 1) & "万"            End If        End If    Next    r.Offset(0, 1).Value = arrEnd Sub

【代码解析】

第5行代码获取第一列的数据区域。
第6行代码将数据读入数组。
第7~20行代码循环处理每个数据。
第8行代码取得数据的最后一个字符。
如果最后一个字符是“亿”,那么第10行代码将数字乘以10000,并在最后添加“万”,代码中使用Val函数可以获取数据中的数字部分。
第11行代码判断最后一个字符是否为数字。
如果是数字,说明数据没有单位,第12代码将数组除以10000。
第13代码读取转换后数字中小数点的位置。
如果不包含小数点,那么第17行代码直接添加“万”;否则第15行代码使用FormatNumber格式化数据,解决缺少小数点之前零的问题。FormatNumber不能替换为Format函数。

FormatNumber的语法格式如下,详细讲解参见 。

FormatNumber(Expression、[ NumDigitsAfterDecimal, [ IncludeLeadingDigit, [ UseParensForNegativeNumbers, [ GroupDigits ]]]])

第21行代码将数据回写到B列。

转载地址:http://zyjl.baihongyu.com/

你可能感兴趣的文章
JZOJ7月27日提高组反思
查看>>
JZOJ7月29日提高组反思
查看>>
【2020.12.02提高组模拟】球员(player)
查看>>
在ENVI5.3 下基于GLT/IGM文件的几何校正具体过程
查看>>
Error LNK2005:_main already defined in test.obj
查看>>
yxy小蒟蒻的201112总结
查看>>
yxy小蒟蒻的201113总结
查看>>
各类反演杂题题解(待补充
查看>>
21.2.3总结
查看>>
线性代数和数学期望杂题
查看>>
21.2.4总结
查看>>
Min_25筛
查看>>
21.2.22 总结
查看>>
【SSL_P2876】2017年东莞市信息学特长生测试题 工程
查看>>
【洛谷_P1347】排序
查看>>
【洛谷_CF261D】Maxim and Increasing Subsequence
查看>>
【洛谷_P2704】炮兵阵地
查看>>
【洛谷_P1433】吃奶酪
查看>>
【SSL_2020.10.26】圆盘
查看>>
【牛客_2020.10.28】购物
查看>>