巧⽤VBA统⼀数字单位
实例需求:A列中有不规范数据,数据单位不⼀致,现需要将数据统⼀为“万”为单位,如B列所⽰。先看⼀下数据规律,有如下三类:
⽆单位数据,如A1
单位为“万”,如A2
单位为“亿”,如A3
Sub demo()
Dim r As Range
formatnumber数字格式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 = arr
End 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 = arr
End 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列。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。