NumToText




Private Function NumToText(dblVal As Double) As String
Static sOnes(0 To 9) As String
Static sTeens(0 To 9) As String
Static sTens(0 To 9) As String
Static sThousands(0 To 4) As String
Static bInit As Boolean

Dim i As Integer
Dim bAllZeros As Boolean
Dim bShowsThousands As Boolean
Dim sValue As String
Dim sBuffer As String
Dim sTemp As String
Dim iCol As Integer
Dim iChar As Integer
'

' Warning - this routine only handles positive values

'

Debug.Assert dblVal > 0

If bInit = False Then
'Initialize array

bInit = True
sOnes(0) = "zero"
sOnes(1) = "one"
sOnes(2) = "two"
sOnes(3) = "three"
sOnes(4) = "four"
sOnes(5) = "five"
sOnes(6) = "six"
sOnes(7) = "seven"
sOnes(8) = "eight"
sOnes(9) = "nine"
sTeens(0) = "ten"
sTeens(1) = "eleven"
sTeens(2) = "twelve"
sTeens(3) = "thirteen"
sTeens(4) = "fourteen"
sTeens(5) = "fifteen"
sTeens(6) = "sixteen"
sTeens(7) = "seventeen"
sTeens(8) = "eighteen"
sTeens(9) = "nineteen"
sTens(0) = ""
sTens(1) = "ten"
sTens(2) = "twenty"
sTens(3) = "thirty"
sTens(4) = "forty"
sTens(5) = "fifty"
sTens(6) = "sixty"
sTens(7) = "seventy"
sTens(8) = "eighty"
sTens(9) = "ninety"
sThousands(0) = ""
sThousands(1) = "thousand" 'US numbering
sThousands(2) = "million"
sThousands(3) = "billion"
sThousands(4) = "trillion"
End If
'

' Setup Error Handler

'

On Error GoTo vbErrorHandler
'

' Get fractional part of value (if any)

'

sBuffer = "and " & Format$((dblVal - Int(dblVal)) * 100, "00") & "/100"
'

' Convert main part to string

'

sValue = CStr(Int(dblVal))

bAllZeros = True

For i = Len(sValue) To 1 Step -1
iChar = Val(Mid$(sValue, i, 1))
iCol = (Len(sValue) - i) + 1
'

'Action depends on 1's, 10's or 100's column

'

Select Case (iCol Mod 3)
Case 1 '1's position
bShowsThousands = True
If i = 1 Then
sTemp = sOnes(iChar) & " "
ElseIf Mid$(sValue, i - 1, 1) = "1" Then
sTemp = sTeens(iChar) & " "
i = i - 1
ElseIf iChar > 0 Then
sTemp = sOnes(iChar) & " "
Else
bShowsThousands = False
If Mid$(sValue, i - 1, 1) <> "0" Then
bShowsThousands = True
ElseIf i > 2 Then
If Mid$(sValue, i - 2, 1) <> "0" Then
bShowsThousands = True
End If
End If
sTemp = ""
End If
If bShowsThousands Then
If iCol > 1 Then
sTemp = sTemp & sThousands(iCol \ 3)
If bAllZeros Then
sTemp = sTemp & " "
Else
sTemp = sTemp & ", "
End If
End If
bAllZeros = False
End If
sBuffer = sTemp & sBuffer
Case 2
If iChar > 0 Then
If Mid$(sValue, i + 1, 1) <> "0" Then
sBuffer = sTens(iChar) & "-" & sBuffer
Else
sBuffer = sTens(iChar) & " " & sBuffer
End If
End If
Case 0
If iChar > 0 Then
sBuffer = sOnes(iChar) & " hundred " & sBuffer
End If
End Select
Next i
sBuffer = UCase$(Left$(sBuffer, 1)) & Mid$(sBuffer, 2)
EndNumToText:
NumToText = sBuffer
Exit Function
vbErrorHandler:
sBuffer = "#Error#"
Resume EndNumToText
End Function











( numtotext.html )- by Paolo Puglisi - Modifica del 17/12/2023