'转换阿拉伯数字为中文人民币大写-------------------------------------------- '调用:Msgbox NtoC(123.45) Public Function NtoC(ByVal sNum As String, _ Optional BITs As String = ",拾,佰,仟", _ Optional UNITs As String = ",[万],[亿],[兆],[万兆]", _ Optional ByVal Yuan As String = "圆", _ Optional ByVal Jiao As String = "角", _ Optional ByVal Fen As String = "分") As String
sNum = sNum If Val(sNum) < 0 Then NtoC = "零" & Yuan Exit Function End If
Dim sIntD, sDecD As String Dim i, iCount, j, iLength As Integer Dim lStartPos As Long Dim sBIT() As String, sUNIT() As String, sCents(2) As String
sBIT = VBA.Split(BITs, ",") sUNIT = VBA.Split(UNITs, ",") sCents(0) = Fen sCents(1) = Jiao Dim temp As String If InStr(sNum, ".") > 0 Then temp = Left(sNum, InStr(sNum, ".") - 1) Else temp = sNum End If iCount = IIf(Len(temp) Mod 4, Len(Trim(temp)) \ 4 + 1, Len(Trim(temp)) \ 4) lStartPos = 1 For i = iCount To 1 Step -1 If i = iCount And Len(Trim(temp)) Mod 4 <> 0 Then iLength = Len(Trim(temp)) Mod 4 Else iLength = 4 End If sIntD = Mid(Trim(temp), lStartPos, iLength) For j = 1 To Len(Trim(sIntD)) If Val(Mid(sIntD, j, 1)) <> 0 Then NtoC = NtoC & Choose(Val(Mid(sIntD, j, 1)), _ "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") & _ sBIT(Len(Trim(sIntD)) - j) Else If Val(Mid(sIntD, j + 1, 1)) <> 0 Then NtoC = NtoC & "零" End If End If Next j lStartPos = lStartPos + iLength If i < iCount Then If (Val(Mid(sIntD, Len(Trim(sIntD)), 1)) <> 0 Or _ Val(Mid(sIntD, Len(Trim(sIntD)) - 1, 1)) <> 0 Or _ Val(Mid(sIntD, Len(Trim(sIntD)) - 2, 1)) Or _ Val(Mid(sIntD, Len(Trim(sIntD)) - 3, 1)) <> 0) Then If i < UBound(sUNIT) + 1 Then NtoC = NtoC & sUNIT(i - 1) 'Else 'NtoC = NtoC & sUNIT(i - 1) End If End If Else 'If i < UBound(sUNIT) + 1 Then NtoC = NtoC & sUNIT(i - 1) 'End If End If Next If Len(Trim(NtoC)) > 0 Then NtoC = NtoC & Yuan End If '小数 If InStr(1, sNum, ".") <> 0 Then sDecD = Right(sNum, Len(sNum) - InStr(1, sNum, ".")) For i = 1 To Len(Trim(sDecD)) If Val(Mid(Trim(sDecD), i, 1)) <> 0 Then NtoC = NtoC & Choose(Val(Mid(Trim(sDecD), i, 1)), _ "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") NtoC = NtoC & sCents(2 - i) If i >= 2 Then Exit For Else If Len(Trim(NtoC)) > 0 Then NtoC = NtoC & "零" End If Next i Else NtoC = NtoC & "整" End If End Function
'调用:Msgbox NtoC(123.45)
Public Function NtoC(ByVal sNum As String, _
Optional BITs As String = ",拾,佰,仟", _
Optional UNITs As String = ",[万],[亿],[兆],[万兆]", _
Optional ByVal Yuan As String = "圆", _
Optional ByVal Jiao As String = "角", _
Optional ByVal Fen As String = "分") As String
sNum = sNum
If Val(sNum) < 0 Then
NtoC = "零" & Yuan
Exit Function
End If
Dim sIntD, sDecD As String
Dim i, iCount, j, iLength As Integer
Dim lStartPos As Long
Dim sBIT() As String, sUNIT() As String, sCents(2) As String
sBIT = VBA.Split(BITs, ",")
sUNIT = VBA.Split(UNITs, ",")
sCents(0) = Fen
sCents(1) = Jiao
Dim temp As String
If InStr(sNum, ".") > 0 Then
temp = Left(sNum, InStr(sNum, ".") - 1)
Else
temp = sNum
End If
iCount = IIf(Len(temp) Mod 4, Len(Trim(temp)) \ 4 + 1, Len(Trim(temp)) \ 4)
lStartPos = 1
For i = iCount To 1 Step -1
If i = iCount And Len(Trim(temp)) Mod 4 <> 0 Then
iLength = Len(Trim(temp)) Mod 4
Else
iLength = 4
End If
sIntD = Mid(Trim(temp), lStartPos, iLength)
For j = 1 To Len(Trim(sIntD))
If Val(Mid(sIntD, j, 1)) <> 0 Then
NtoC = NtoC & Choose(Val(Mid(sIntD, j, 1)), _
"壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") & _
sBIT(Len(Trim(sIntD)) - j)
Else
If Val(Mid(sIntD, j + 1, 1)) <> 0 Then
NtoC = NtoC & "零"
End If
End If
Next j
lStartPos = lStartPos + iLength
If i < iCount Then
If (Val(Mid(sIntD, Len(Trim(sIntD)), 1)) <> 0 Or _
Val(Mid(sIntD, Len(Trim(sIntD)) - 1, 1)) <> 0 Or _
Val(Mid(sIntD, Len(Trim(sIntD)) - 2, 1)) Or _
Val(Mid(sIntD, Len(Trim(sIntD)) - 3, 1)) <> 0) Then
If i < UBound(sUNIT) + 1 Then
NtoC = NtoC & sUNIT(i - 1)
'Else
'NtoC = NtoC & sUNIT(i - 1)
End If
End If
Else
'If i < UBound(sUNIT) + 1 Then
NtoC = NtoC & sUNIT(i - 1)
'End If
End If
Next
If Len(Trim(NtoC)) > 0 Then
NtoC = NtoC & Yuan
End If
'小数
If InStr(1, sNum, ".") <> 0 Then
sDecD = Right(sNum, Len(sNum) - InStr(1, sNum, "."))
For i = 1 To Len(Trim(sDecD))
If Val(Mid(Trim(sDecD), i, 1)) <> 0 Then
NtoC = NtoC & Choose(Val(Mid(Trim(sDecD), i, 1)), _
"壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖")
NtoC = NtoC & sCents(2 - i)
If i >= 2 Then Exit For
Else
If Len(Trim(NtoC)) > 0 Then NtoC = NtoC & "零"
End If
Next i
Else
NtoC = NtoC & "整"
End If
End Function