To convert numbers into text, there is no builtin function in MS Excel as of now. Using the below VBA code you can overcome this issue. There are situations like writing a cheque leaf, printing a rent agreement, or writing contract documents that may require printing the transaction amount in the text. Make use of this code to convert numbers into text automatically.
Copy and paste this VBA code into your Excel VBA editor module. Or Insert an empty module and paste this code.
- Attribute VB_Name = "Module1"
- 'Attribute VB_Name = "Module2"
- ' **** Author : Krishna S
- ' **** Tittle : Converting Hindu Arabic Currency(Indian System) to Words
- ' **** Copyright Owner : Krishna S
- ' **** Description : This utility converts currencies in Indian numbering system to words.
- ' **** Limitations : Converts only upto 10,00,00,000( Ten Crores)
- Function ConvertCurrencyToEnglish(ByVal MyNumber)
- Dim Temp
- Dim Rupees, Paise
- Dim DecimalPlace, Count
- ReDim Place(9) As String
- Place(2) = " Thousand "
- Place(3) = " Lac "
- Place(4) = " Core "
- ' Place(5) = " Hundred Core "
- ' 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 <> ""
- If Count = 1 Then
- 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
- Else
- ' Convert last 3 digits of MyNumber to English Rupees.
- If Len(MyNumber) = 1 Then
- Temp = ConvertDigit(MyNumber)
- Else
- Temp = ConvertTens(Right(MyNumber, 2))
- End If
- 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) - 2)
- Else
- MyNumber = ""
- End If
- Count = Count + 1
- End If
- Loop
- ' Clean up Rupees.
- Select Case Rupees
- Case ""
- Rupees = ""
- Case "One"
- Rupees = "One Rupee"
- Case Else
- Rupees = Rupees & " Rupees"
- End Select
- ' Clean up Paise.
- Select Case Paise
- Case ""
- Paise = ""
- Case "One"
- Paise = " And One Cent"
- 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 1: Result = "One"
- 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