Я написал новый код.
Function NumbertoString(sNum As String)
Dim s As String
Dim vDigit(), vR(), vMod()
Dim Digit1000
Dim sDal As String, sCent As String
Dim Cent As String, Num As String
Dim i As Integer, x As Integer, k As Integer
If InStr(sNum, ".") Then
s = Split(sNum, ".")(0)
Cent = Split(sNum, ".")(1)
Else
s = sNum
Cent = ""
End If
Digit1000 = Array("", "", " Thousand ", " Million ", " Billion ", " Trillion ")
k = Len(s)
x = k Mod 3
n = Int(k / 3)
If n = 0 Then GoTo p
ReDim vDigit(1 To n)
'@@If the length of the number is a multiple of 3
For i = 1 To n
st = k - i * 3 + 1
vDigit(i) = Mid(s, st, 3)
Next i
'@@If the length of the number is NOT a multiple of 3
p:
If x > 0 Then
n = n + 1
ReDim Preserve vDigit(1 To n)
vDigit(n) = Left(s, x)
End If
For i = n To 1 Step -1
Num = Num & getString(vDigit(i)) & Digit1000(i)
Next i
Select Case Num
Case ""
sDal = " No Dallar "
Case "One"
sDal = " Dallar "
Case Else
sDal = " Dallars "
End Select
Select Case getString(Val(Cent))
Case ""
sCent = "and No Cents"
Case "One"
sCent = " Cent"
Case Else
sCent = " Cents"
End Select
NumbertoString = Num & sDal & " and " & getString(Val(Cent)) & sCent
End Function
Function getString(s)
Dim vDigit(), vR(), vMod()
Dim n As Integer, i As Long
Dim Num As String
dig1 = Array("", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine")
dig10 = Array("Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen")
dig20 = Array("", "", "Twenty ", "Thirty ", "Forty ", "Fitty ", "Sixty ", "Seventy ", "Eighty", "Ninety ")
If s = "" Then Exit Function
Do Until (s / 10) < i
n = n + 1
i = 10 ^ n
ReDim Preserve vDigit(1 To n)
vDigit(n) = i
Loop
ReDim vMod(1 To n)
For i = 1 To n
vMod(i) = s Mod vDigit(i)
Next i
ReDim vR(1 To n + 1)
vR(1) = vMod(1)
For i = 2 To n
vR(i) = Int((vMod(i) - vMod(i - 1)) / vDigit(i - 1))
Next i
vR(n + 1) = Int((s - vMod(n)) / vDigit(n))
Select Case vR(2)
Case 0
Num = dig1(vR(1))
Case 1
Num = dig10(vR(1))
Case Else
Num = dig20(vR(2)) & dig1(vR(1))
End Select
If UBound(vR) = 3 Then
Num = dig1(vR(3)) & " Hundred " & Num
End If
getString = Num
End Function
изображение результата
