Convert Numerals to Text Problem

R

Rashid Khan

Hello All,

In India we use the following format to display currency:

1,00,000 -- Known as One Lakh instead of One Hundred Thousand
10,00,000 -- Known as Ten Lakhs instead of One Million.
10,000,000 --Known as One Crore instead of One Billion

I have used the following code and need help to display the value as shown
above.

Any help, suggestions or another code to suit my requirement would be
greatly appreciated

Option Compare Database
Option Explicit

Function ConvertCurrencyToEnglish(ByVal MyNumber)
Dim Temp
Dim Rupees, Paise
Dim DecimalPlace, Count

ReDim Place(9) As String
Place(2) = " Thousand "
Place(3) = " Million"
Place(4) = " Billion "
Place(5) = " Trillion "

' Convert MyNumber to a string, trimming extra spaces.
MyNumber = Trim(Str(MyNumber))

' Find decimal place.
DecimalPlace = InStr(MyNumber, ".")

' If we find decimal place...
If DecimalPlace > 0 Then
' Convert Paise
Temp = Left(Mid(MyNumber, DecimalPlace + 1) & "00", 2)
Paise = ConvertTens(Temp)

' Strip off Paise from remainder to convert.
MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))
End If

Count = 1
Do While MyNumber <> ""
' Convert last 3 digits of MyNumber to English Rupees.
Temp = ConvertHundreds(Right(MyNumber, 3))
If Temp <> "" Then Rupees = Temp & Place(Count) & Rupees
If Len(MyNumber) > 3 Then
' Remove last 3 converted digits from MyNumber.
MyNumber = Left(MyNumber, Len(MyNumber) - 3)
Else
MyNumber = ""
End If
Count = Count + 1
Loop

' Clean up Rupees.
Select Case Rupees
Case ""
Rupees = "No Rupees"
Case "One"
Rupees = "One Rupee"
Case Else
Rupees = Rupees & " Rupees"
End Select

' Clean up Paise.
Select Case Paise
Case ""
Paise = " And Nil Paise"
Case "One"
Paise = " And One Paise"
Case Else
Paise = " And " & Paise & " Paise"
End Select

ConvertCurrencyToEnglish = Rupees & Paise
End Function

Private Function ConvertHundreds(ByVal MyNumber)
Dim Result As String

' Exit if there is nothing to convert.
If Val(MyNumber) = 0 Then Exit Function

' Append leading zeros to number.
MyNumber = Right("000" & MyNumber, 3)

' Do we have a hundreds place digit to convert?
If Left(MyNumber, 1) <> "0" Then
Result = ConvertDigit(Left(MyNumber, 1)) & " Hundred "
End If

' Do we have a tens place digit to convert?
If Mid(MyNumber, 2, 1) <> "0" Then
Result = Result & ConvertTens(Mid(MyNumber, 2))
Else
' If not, then convert the ones place digit.
Result = Result & ConvertDigit(Mid(MyNumber, 3))
End If

ConvertHundreds = Trim(Result)
End Function

Private Function ConvertTens(ByVal MyTens)
Dim Result As String

' Is value between 10 and 19?
If Val(Left(MyTens, 1)) = 1 Then
Select Case Val(MyTens)
Case 10: Result = "Ten"
Case 11: Result = "Eleven"
Case 12: Result = "Twelve"
Case 13: Result = "Thirteen"
Case 14: Result = "Fourteen"
Case 15: Result = "Fifteen"
Case 16: Result = "Sixteen"
Case 17: Result = "Seventeen"
Case 18: Result = "Eighteen"
Case 19: Result = "Nineteen"
Case Else
End Select
Else
' .. otherwise it's between 20 and 99.
Select Case Val(Left(MyTens, 1))
Case 2: Result = "Twenty "
Case 3: Result = "Thirty "
Case 4: Result = "Forty "
Case 5: Result = "Fifty "
Case 6: Result = "Sixty "
Case 7: Result = "Seventy "
Case 8: Result = "Eighty "
Case 9: Result = "Ninety "
Case Else
End Select

' Convert ones place digit.
Result = Result & ConvertDigit(Right(MyTens, 1))
End If

ConvertTens = Result
End Function

Private Function ConvertDigit(ByVal MyDigit)
Select Case Val(MyDigit)
Case 1: ConvertDigit = "One"
Case 2: ConvertDigit = "Two"
Case 3: ConvertDigit = "Three"
Case 4: ConvertDigit = "Four"
Case 5: ConvertDigit = "Five"
Case 6: ConvertDigit = "Six"
Case 7: ConvertDigit = "Seven"
Case 8: ConvertDigit = "Eight"
Case 9: ConvertDigit = "Nine"
Case Else: ConvertDigit = ""
End Select
End Function

TIA

Rashid
 
R

Rashid Khan

Hi John,
I downloaded and tested the code. It does not test the following
conditions:
0.00 - it generates Rupees and Paisa (It should say Rupees Nil and Paisa
Nil)
0.10 - it generates Rupees and Ten Paisa (It should say Rupees Nil and Ten
Paisa)
1.10 - it generates Rupees One Thousand One and Ten Paisa
12.10 - it generates Twelve Thousand Twelve and Ten Paisa

Can u suggest any other source plz. As with my limited knowledge I cannot
get the code to correct the above problems

Rashid Khan
 
J

John Nurick

Hi Rashid,

The problems you found may explain why that code wasn't rated very
highly by the other people who have downloaded it...

But this must be a pretty common problem. If you search Google (or
http:/groups.google.com) with a search expression something like

format crore lakh vb OR vba

you'll find some other code.



Hi John,
I downloaded and tested the code. It does not test the following
conditions:
0.00 - it generates Rupees and Paisa (It should say Rupees Nil and Paisa
Nil)
0.10 - it generates Rupees and Ten Paisa (It should say Rupees Nil and Ten
Paisa)
1.10 - it generates Rupees One Thousand One and Ten Paisa
12.10 - it generates Twelve Thousand Twelve and Ten Paisa

Can u suggest any other source plz. As with my limited knowledge I cannot
get the code to correct the above problems

Rashid Khan
 
R

Rashid Khan

Thanks would try it on Google.
Rashid
John Nurick said:
Hi Rashid,

The problems you found may explain why that code wasn't rated very
highly by the other people who have downloaded it...

But this must be a pretty common problem. If you search Google (or
http:/groups.google.com) with a search expression something like

format crore lakh vb OR vba

you'll find some other code.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top