本帖最后由 weiyingde 于 2019-11-1 20:09 编辑
写在前头
下面是自己的一个自定义函数,作用是将阿拉伯数字转换为中文大写数字,实现的作用
如text(number,"[dbnum1"]和text[number,"[dbnum2]"以及Excel隐藏的工作表函数
Numberstring的作用。
这两个函数确实很强大,很好用,但在Excel工作环境中好用,到了pptVBA环境下,使用过程中,
冷不防要后台启动Excel.application,造成当前ppt运行极不稳定,常常突发意外,所以在ppt中,
这两个好用的函数,竟不能排上好的用场,只好另辟蹊径。想到了VBA自定义函数。
自定义函数中可以借鉴的诸如人民币大写函数,网上有大量事例,可以借鉴,然而不是极其繁琐
就是精炼直至:不想麻烦,繁琐的自然不在考虑中;简单之至,又一时半载消化不了,只好硬着头皮自力更生。但目前只能写到一半,脑力有限,发在此处,如有好心人士路过,希望补充完善。
先谢了。
Function XtD(n As Integer, Optional k As Integer)
Select Case n
Case 0
sr = IIf(k = 1, "0", "零")
Case 10
sr = IIf(k = 1, "十", "拾")
Case 11
sr = IIf(k = 1, "十一", "拾壹")
Case 1 To 9
sr = IIf(k = 1, Choose(n, "一", "二", "三", "四", "五", "六", "七", "八", "九"), Choose(n, "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"))
Case 11 To 99
ssh = Int(n / 10)
wsh = n - ssh * 10
If wsh = 0 Then
sr = IIf(k = 1, Choose(ssh, "一", "二", "三", "四", "五", "六", "七", "八", "九") & "十", Choose(ssh, "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") & "拾")
Else
sr = IIf(k = 1, Choose(ssh, "一", "二", "三", "四", "五", "六", "七", "八", "九") & "十" & Choose(wsh, "一", "二", "三", "四", "五", "六", "七", "八", "九"), Choose(ssh, "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") & "拾" & Choose(wsh, "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"))
End If
Case 100
sr = IIf(k = 1, "一百", "壹佰")
Case 101 To 999
ssh = Int(n / 100)
wsh = n - ssh * 100
zsh2 = Int(wsh / 10)
wsh2 = wsh Mod 10
If zsh2 = 0 Then
If wsh2 = 0 Then
sr = IIf(k = 1, Choose(ssh, "一", "二", "三", "四", "五", "六", "七", "八", "九") & "百", Choose(ssh, "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") & "佰")
Else
sr1 = IIf(k = 1, Choose(Val(Left(n, 1)), "一", "二", "三", "四", "五", "六", "七", "八", "九") & "百", Choose(Val(Left(n, 1)), "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") & "佰")
sr2 = IIf(k = 1, "○", "零")
sr3 = IIf(k = 1, Choose(Val(Right(n, 1)), "一", "二", "三", "四", "五", "六", "七", "八", "九"), Choose(Val(Right(n, 1)), "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"))
sr = sr1 & sr2 & sr3
End If
ElseIf zsh2 >= 1 Then
If wsh2 = 0 Then
sr1 = IIf(k = 1, Choose(Val(Left(n, 1)), "一", "二", "三", "四", "五", "六", "七", "八", "九") & "百", Choose(Val(Left(n, 1)), "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") & "佰")
sr2 = IIf(k = 1, Choose(Val(Mid(n, 2, 1)), "一", "二", "三", "四", "五", "六", "七", "八", "九") & "十", Choose(Val(Mid(n, 2, 1)), "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") & "拾")
sr = sr1 & sr2
Else
sr1 = IIf(k = 1, Choose(Val(Left(n, 1)), "一", "二", "三", "四", "五", "六", "七", "八", "九") & "百", Choose(Val(Left(n, 1)), "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") & "佰")
sr2 = IIf(k = 1, Choose(Val(Mid(n, 2, 1)), "一", "二", "三", "四", "五", "六", "七", "八", "九") & "十", Choose(Val(Mid(n, 2, 1)), "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") & "拾")
sr3 = IIf(k = 1, Choose(Val(Right(n, 1)), "一", "二", "三", "四", "五", "六", "七", "八", "九"), Choose(Val(Right(n, 1)), "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"))
sr = sr1 & sr2 & sr3
End If
End If
Case 1000 To 9999
ssh = Int(N / 1000)
wsh = N Mod 1000
zsh1 = Int(wsh / 100)
wsh1 = wsh - 100 * zsh1
zsh2 = Int(wsh1 / 10)
wsh2 = wsh1 - 10 * zsh2
If wsh = 0 Then
sr = IIf(k = 1, Choose(Val(left(N, 1)), "一", "二", "三", "四", "五", "六", "七", "八", "九") & "千", Choose(Val(left(N, 1)), "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") & "仟")
Else
If zsh1 <> 0 Then
If zsh2 <> 0 Then
If wsh2 <> 0 Then
For i = 1 To 4
If k = 1 Then
sr = sr & Choose(Val(Mid(N, i, 1)), "一", "二", "三", "四", "五", "六", "七", "八", "九") & Choose(i, "千", "百", "十", "")
Else
sr = sr & Choose(Val(Mid(N, i, 1)), "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") & Choose(i, "仟", "佰", "拾", "")
End If
Next
Else
For i = 1 To 3
If k = 1 Then
sr = sr & Choose(Val(Mid(N, i, 1)), "一", "二", "三", "四", "五", "六", "七", "八", "九") & Choose(i, "千", "百", "十")
Else
sr = sr & Choose(Val(Mid(N, i, 1)), "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") & Choose(i, "仟", "佰", "拾")
End If
Next
End If
Else
If wsh2 <> 0 Then
sr1 = IIf(k = 1, Choose(Val(left(N, 1)), "一", "二", "三", "四", "五", "六", "七", "八", "九") & "千", Choose(Val(left(N, 1)), "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") & "仟")
sr2 = IIf(k = 1, Choose(Val(right(N, 1)), "一", "二", "三", "四", "五", "六", "七", "八", "九"), Choose(Val(right(N, 1)), "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"))
sr = sr1 & IIf(k = 1, "○", "零") & sr2
Else
sr1 = IIf(k = 1, Choose(Val(left(N, 1)), "一", "二", "三", "四", "五", "六", "七", "八", "九") & "千", Choose(Val(left(N, 1)), "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") & "仟")
sr2 = IIf(k = 1, Choose(Val(Mid(N, 2, 1)), "一", "二", "三", "四", "五", "六", "七", "八", "九") & "百", Choose(Val(Mid(N, 2, 1)), "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") & "佰")
sr = sr1 & sr2
End If
End If
Else
If zsh2 <> 0 Then
sr1 = IIf(k = 1, Choose(Val(left(N, 1)), "一", "二", "三", "四", "五", "六", "七", "八", "九") & "千", Choose(Val(left(N, 1)), "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") & "仟")
sr2 = IIf(k = 1, Choose(Val(Mid(N, 3, 1)), "一", "二", "三", "四", "五", "六", "七", "八", "九") & "十", Choose(Val(Mid(N, 3, 1)), "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") & "拾")
sr3 = IIf(k = 1, Choose(Val(right(N, 1)), "一", "二", "三", "四", "五", "六", "七", "八", "九"), Choose(Val(right(N, 1)), "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"))
sr = sr1 & IIf(k = 1, "○", "零") & sr2 & sr3
Else
sr1 = IIf(k = 1, Choose(Val(left(N, 1)), "一", "二", "三", "四", "五", "六", "七", "八", "九") & "千", Choose(Val(left(N, 1)), "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") & "仟")
sr2 = IIf(k = 1, Choose(Val(right(N, 1)), "一", "二", "三", "四", "五", "六", "七", "八", "九"), Choose(Val(right(N, 1)), "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"))
sr = sr1 & IIf(k = 1, "○", "零") & sr2
End If
End If
End If
End Select
XtD = sr
End Function |