提供下载人民币大小写转换,经测试通过,不会出现无值和越界情况。
实现方法:
1. 启动excel。按“alt+f11”快捷键打开“visual basic编辑器”。
2. 在“visual basic编辑器”中,单击“插入”菜单栏中的“模块”命令,插入一个模块。双击左侧“工程”窗口中的“模块1”选项,在窗口右边展开“模块1(代码)”编辑窗口,然后输入如下代码:
'============================================================
Function DAXIE(n)
DAXIE = Replace(Application.Text(Round(n + 0.00000001, 2), "[DBnum2]"), ".", "元")
DAXIE = IIf(Left(Right(DAXIE, 3), 1) = "元", Left(DAXIE, Len(DAXIE) - 1) & "角" & Right(DAXIE, 1) & "分", IIf(Left(Right(DAXIE, 2), 1) = "元", DAXIE & "角整", IIf(DAXIE = "零", "", DAXIE & "元整")))
DAXIE = Replace(Replace(Replace(Replace(DAXIE, "零元零角", ""), "零元", ""), "零角", "零"), "-", "负")
End Function
'============================================================
Public Function XiaoXie(ByVal Str_DaXie As String) As Double
'**********************************************
'* 人民币中文大写函数->数值 *
'**********************************************
Dim arr_Num(), arr_Power() As Single
Dim arr_Dw() As String
Dim str_NumAll As String
Dim str_One As String
Dim i, m, n, num_I, num_StrLen, num_Power As Integer
str_NumAll = "零壹贰叁肆伍陆柒捌玖拾佰仟万亿兆元角分"
num_StrLen = Len(Str_DaXie)
XiaoXie = 0
ReDim arr_Num(0)
ReDim arr_Dw(0)
If num_StrLen = 0 Then Exit Function
For i = 1 To num_StrLen
str_One = Mid(Str_DaXie, i, 1)
num_I = InStr(1, str_NumAll, str_One) - 1
Select Case num_I
Case 1 To 9 '壹贰叁肆伍陆柒捌玖
If i = 1 Then
ReDim Preserve arr_Num(UBound(arr_Num) + 1)
ReDim Preserve arr_Dw(UBound(arr_Dw) + 1)
arr_Num(UBound(arr_Num)) = num_I
Else
n = InStr(1, str_NumAll, Mid(Str_DaXie, i - 1, 1)) - 1
If n > 0 And n < 10 Then
arr_Num(UBound(arr_Num)) = arr_Num(UBound(arr_Num)) * 10 + num_I '上一位也是数字
Else
ReDim Preserve arr_Num(UBound(arr_Num) + 1)
ReDim Preserve arr_Dw(UBound(arr_Dw) + 1)
arr_Num(UBound(arr_Num)) = num_I
End If
End If
Case 10 To 18
arr_Dw(UBound(arr_Dw)) = arr_Dw(UBound(arr_Dw)) & str_One
End Select
Next i
ReDim arr_Power(UBound(arr_Num))
For i = UBound(arr_Num) To 1 Step -1
arr_Power(i) = 0
For m = 1 To Len(arr_Dw(i))
str_One = Mid(arr_Dw(i), m, 1)
Select Case InStr(1, "分角元拾佰仟万亿兆", str_One)
Case 1 To 7 '分角元拾佰仟万
arr_Power(i) = arr_Power(i) + InStr(1, "分角元拾佰仟万亿兆", Mid(arr_Dw(i), m, 1)) - 3
Case 8 '亿
arr_Power(i) = arr_Power(i) + 8
Case 9 '兆
arr_Power(i) = arr_Power(i) + 12
End Select
Next m
If i < UBound(arr_Num) Then
Do While arr_Power(i) < arr_Power(i + 1)
arr_Power(i) = arr_Power(i) + 4
Loop
End If
XiaoXie = XiaoXie + arr_Num(i) * 10 ^ arr_Power(i)
Next i
If InStr(1, Str_DaXie, "负") > 0 Then XiaoXie = -XiaoXie
End Function
'============================================================
输 入完成后,关闭“visual basic编辑器”返回工作表。现在,我们可测试一下这个函数。首先,在a1单元格中输入一个小写数字的金额,例如123456.78,然后,在a2单元 格中输入公式:=DAXIE(a1),确认后即可将a1所表示的小写数字金额转换为大写的数字金额,并在a2单元格中显示出来;小写转大写,输入公式:=XIAOXIE(a2),怎么样,挺方便吧?