Friday, June 3, 2011

A Function That Converts Digits into Words

Public Function numtowords(no As Long) As String

no_str = CStr(no)


str_len = Len(no_str)

temp_str = ""

If str_len < 9 Then
For i = 1 To 9 - str_len
temp_str = temp_str + "0"
Next
no_str = temp_str + no_str
End If


'For last 2 digits

If Val(Right(no_str, 2)) < 20 Then
If Val(Right(no_str, 2)) < 10 Then
unit = unitnum(Right(no_str, 1))
Else
unit = unitnum(Right(no_str, 2))
End If
Else
unit = numty(Left(Right(no_str, 2), 1)) + " " + unitnum(Right(no_str, 1))
End If


'For 3rd digit from last

If Val(Left(Right(no_str, 3), 1)) <> 0 Then
temp_unit = unitnum(Left(Right(no_str, 3), 1)) + " Hundred "
unit = temp_unit + unit
End If

'For 4th & 5th digits from last
If Left(Right(no_str, 5), 2) <> "00" Then

If Val(Left(Right(no_str, 5), 2)) < 20 Then

If Val(Left(Right(no_str, 5), 2)) < 10 Then
temp_unit = unitnum(Left(Right(no_str, 4), 1))
Else
temp_unit = unitnum(Left(Right(no_str, 5), 2))
End If

unit = temp_unit + " Thousand " + unit

Else

temp_unit = numty(Left(Right(no_str, 5), 1)) + " " + unitnum(Left(Right(no_str, 4), 1))

unit = temp_unit + " Thousand " + unit

End If

End If
'For 6th & 7th digits from last


If Left(Right(no_str, 7), 2) <> "00" Then
If Val(Left(Right(no_str, 7), 2)) < 20 Then

If Val(Left(Right(no_str, 7), 2)) < 10 Then
temp_unit = unitnum(Left(Right(no_str, 6), 1))
Else
temp_unit = unitnum(Left(Right(no_str, 7), 2))
End If

unit = temp_unit + " Lakhs " + unit

Else

temp_unit = numty(Left(Right(no_str, 7), 1)) + " " + unitnum(Left(Right(no_str, 6), 1))

unit = temp_unit + " Lakhs " + unit

End If

End If
'For 8th & 9th digits from last

If Left(Right(no_str, 9), 2) <> "00" Then

If Val(Left(Right(no_str, 9), 2)) < 20 Then

If Val(Left(Right(no_str, 9), 2)) < 10 Then
temp_unit = unitnum(Left(Right(no_str, 8), 1))
Else
temp_unit = unitnum(Left(Right(no_str, 9), 2))
End If

unit = temp_unit + " Crores " + unit

Else

temp_unit = numty(Left(Right(no_str, 9), 1)) + " " + unitnum(Left(Right(no_str, 8), 1))

unit = temp_unit + " Crores " + unit

End If

End If

word_str = unit
numtowords = word_str

End Function

Public Function numty(num As Integer) As String
Dim tstr As String
Select Case num

Case 2:
tstr = "Twenty"
Case 3:
tstr = "Thirty"
Case 4:
tstr = "Forty"
Case 5:
tstr = "Fifty"
Case 6:
tstr = "Sixty"
Case 7:
tstr = "Seventy"
Case 8:
tstr = "Eighty"
Case 9:
tstr = "Ninty"
End Select

numty = tstr

End Function

Public Function unitnum(num As String) As String
Dim tstr As String
Select Case num

Case "0":
tstr = ""
Case "1":
tstr = "One"
Case "2":
tstr = "Two"
Case "3":
tstr = "Three"
Case "4":
tstr = "Four"
Case "5":
tstr = "Five"
Case "6":
tstr = "Six"
Case "7":
tstr = "Seven"
Case "8":
tstr = "Eight"
Case "9":
tstr = "Nine"
Case "10":
tstr = "Ten"
Case "11":
tstr = "Eleven"
Case "12":
tstr = "Twelve"
Case "13":
tstr = "Thirteen"
Case "14":
tstr = "Fourteen"
Case "15":
tstr = "Fifteen"
Case "16":
tstr = "Sixteen"
Case "17":
tstr = "Seventeen"
Case "18":
tstr = "Eighteen"
Case "19":
tstr = "Nineteen"
End Select

unitnum = tstr

End Function

No comments: