博客
关于我
巧用VBA统一数字单位
阅读量:272 次
发布时间: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/

你可能感兴趣的文章
Kotlin + Spring Boot :下一代 Java 服务端开发 (视频)
查看>>
5G蝴蝶效应:孕育万亿级产业
查看>>
PPT分享 | 中国移动十大领域5G应用案例
查看>>
宝信软件丛力群:工业互联网赋能钢铁行业高质量发展
查看>>
7个国家级、省级车联网先导区详细介绍!
查看>>
小米等9家中企又被美“拉黑”;工信部公布81项通信行业标准;诺基亚获5G合同...
查看>>
79家信息技术企业,募资1600亿!科创板企业募资、市值、涨幅情况排行榜发布...
查看>>
官宣:湘江智能“车-站-路-云”一体化协同智慧公交解决方案来啦!
查看>>
【论文写作PS】两张图片合为一张,不覆盖
查看>>
第3.1.6章 WEB系统最佳实践 js控件之bootstrap table
查看>>
[OpenGL ES] VBO 顶点缓冲对象
查看>>
尚硅谷2019年Netty教程 零拷贝 ----目标netty---step2.10
查看>>
打开UltraEdit,提示文件可能不是DOS格式
查看>>
Event Loop详解
查看>>
foxmail配置qq邮箱,ssl连接错误
查看>>
UltraEdit不产生bak 文件可能不是DOS格式
查看>>
【互联网安全】业务安全及防护(数据风控)
查看>>
云计算-大数据-云安全高等教育改革示范教材
查看>>
网站建设:简单动态网站搭建
查看>>
基于房源的画像分析
查看>>