# VBA-Excel: Convert Numbers (Rupees) into Words OR Text – Updated Till 1000000 Crore With Decimal Numbers

Example:

 1e+09 Rupees One Hundred Crores 345.56 Rupees Three Hundred Fourty Five and Fifty Six paise only 1.23123e+07 Rupees One Crore Twenty Three Lacs Twelve Thousand Three Hundred Twelve 1e+09 Rupees Ninty Nine Crores Ninty Nine Lacs Ninty Nine Thousand Nine Hundred Ninty Nine 1e+10 Rupees Nine Hundred Ninty Nine Crores Ninty Nine Lacs Ninty Nine Thousand Nine Hundred Ninty Nine 1212.34 Rupees One Thousand Two Hundred Twelve and Thirty Four paise only 2.32311e+07 Rupees Two Crore Thirty Two Lacs Thirty One Thousand One Hundred Eleven

Steps:

• Open a new WorkBook
• Create a Button
• Copy Paste the Complete Code
• Assign the macro to the button created
• Write the Number in Column A
• Click the Convert button
• You will find the text of number in column B

Complete Code:

 Sub sumit() Dim mainWorkBook Set mainWorkBook = ActiveWorkbook intRows = mainWorkBook.Sheets("Main").UsedRange.Rows.Count 'MsgBox intRows For i = 1 To intRows intValue = mainWorkBook.Sheets("Main").Range("A" & i) If intValue <> "" Then mainWorkBook.Sheets("Main").Range("B" & i) = FnConvert(intValue) End If Next End Sub Function FnConvert(strNumber) blnDecimalExist = False strNumber = CStr(strNumber) If InStr(1, strNumber, ".", vbTextCompare) > 0 Then arrSplit = Split(strNumber, ".") strNumber = arrSplit(0) strDecimal = arrSplit(1) If Len(strDecimal) > 2 Then strDecimal = Mid(strDecimal, 0, 2) End If If Len(strDecimal) > 0 And Len(strDecimal) < 2 Then strDecimalConversion = FnGetUnitDigit(strDecimal) End If If Len(strDecimal) > 1 And Len(strDecimal) < 3 Then strDecimalConversion = FnGetTensDigit(strDecimal) End If blnDecimalExist = True End If If Len(strNumber) > 0 And Len(strNumber) < 2 Then strTextConversion = FnGetUnitDigit(strNumber) End If If Len(strNumber) > 1 And Len(strNumber) < 3 Then strTextConversion = FnGetTensDigit(strNumber) End If If Len(strNumber) > 2 And Len(strNumber) < 4 Then strTextConversion = FnGetHundreds(strNumber) End If If Len(strNumber) > 3 And Len(strNumber) < 6 Then If Len(strNumber) = 4 Then strTextConversion = FnGetThousandsOne(strNumber) End If If Len(strNumber) = 5 Then strTextConversion = FnGetThousandsTwo(strNumber) End If End If If Len(strNumber) > 5 And Len(strNumber) < 8 Then If Len(strNumber) = 6 Then strTextConversion = FnGetLacsOne(strNumber) End If If Len(strNumber) = 7 Then strTextConversion = FnGetLacsTwo(strNumber) End If End If If Len(strNumber) > 7 And Len(strNumber) < 15 Then If Len(strNumber) = 8 Then strTextConversion = FnGetCroreOne(strNumber) End If If Len(strNumber) = 9 Then strTextConversion = FnGetCroreTwo(strNumber) End If If Len(strNumber) = 10 Then strTextConversion = FnGetCroreThree(strNumber) End If If Len(strNumber) = 11 Then strTextConversion = FnGetCroreFour(strNumber) End If If Len(strNumber) = 12 Then strTextConversion = FnGetCroreFive(strNumber) End If If Len(strNumber) = 13 Then strTextConversion = FnGetCroreSix(strNumber) End If If Len(strNumber) = 14 Then strTextConversion = FnGetCroreSeven(strNumber) End If End If If blnDecimalExist Then strTextConversion = "Rupees " & strTextConversion & " and " & strDecimalConversion & " paise only" Else strTextConversion = "Rupees " & strTextConversion End If FnConvert = strTextConversion End Function Function FnGetCroreSeven(intN) Dim Str 'temp = FnGetTensDigit(Left(intN, 3)) 'If temp <> "" Then Str = FnGetLacsTwo(Left(intN, 7)) & " Crores " & FnGetLacsTwo(Right(intN, Len(intN) – 7)) 'Else ' Str = FnGetLacsTwo(Right(intN, Len(intN) – 3)) 'End If FnGetCroreSeven = Str End Function Function FnGetCroreSix(intN) Dim Str 'temp = FnGetTensDigit(Left(intN, 3)) 'If temp <> "" Then Str = FnGetLacsOne(Left(intN, 6)) & " Crores " & FnGetLacsTwo(Right(intN, Len(intN) – 6)) 'Else ' Str = FnGetLacsTwo(Right(intN, Len(intN) – 3)) 'End If FnGetCroreSix = Str End Function Function FnGetCroreFive(intN) Dim Str 'temp = FnGetTensDigit(Left(intN, 3)) 'If temp <> "" Then Str = FnGetThousandsTwo(Left(intN, 5)) & " Crores " & FnGetLacsTwo(Right(intN, Len(intN) – 5)) 'Else ' Str = FnGetLacsTwo(Right(intN, Len(intN) – 3)) 'End If FnGetCroreFive = Str End Function Function FnGetCroreFour(intN) Dim Str 'temp = FnGetTensDigit(Left(intN, 3)) 'If temp <> "" Then Str = FnGetThousandsOne(Left(intN, 4)) & " Crores " & FnGetLacsTwo(Right(intN, Len(intN) – 4)) 'Else ' Str = FnGetLacsTwo(Right(intN, Len(intN) – 3)) 'End If FnGetCroreFour = Str End Function Function FnGetCroreThree(intN) Dim Str 'temp = FnGetTensDigit(Left(intN, 3)) 'If temp <> "" Then Str = FnGetHundreds(Left(intN, 3)) & " Crores " & FnGetLacsTwo(Right(intN, Len(intN) – 3)) 'Else ' Str = FnGetLacsTwo(Right(intN, Len(intN) – 3)) 'End If FnGetCroreThree = Str End Function Function FnGetCroreTwo(intN) Dim Str temp = FnGetTensDigit(Left(intN, 2)) If temp <> "" Then Str = FnGetTensDigit(Left(intN, 2)) & " Crores " & FnGetLacsTwo(Right(intN, Len(intN) – 2)) Else Str = FnGetLacsTwo(Right(intN, Len(intN) – 2)) End If FnGetCroreTwo = Str End Function Function FnGetCroreOne(intN) Dim Str temp = FnGetUnitDigit(Left(intN, 1)) If temp <> "" Then Str = FnGetUnitDigit(Left(intN, 1)) & " Crore " & FnGetLacsTwo(Right(intN, Len(intN) – 1)) Else Str = FnGetLacsTwo(Right(intN, Len(intN) – 1)) End If FnGetCroreOne = Str End Function Function FnGetLacsTwo(intN) Dim Str temp = FnGetTensDigit(Left(intN, 2)) If temp <> "" Then Str = FnGetTensDigit(Left(intN, 2)) & " Lacs " & FnGetThousandsTwo(Right(intN, Len(intN) – 2)) Else Str = FnGetThousandsTwo(Right(intN, Len(intN) – 2)) End If FnGetLacsTwo = Str End Function Function FnGetLacsOne(intN) Dim Str 'Str = FnGetUnitDigit(Left(intN, 1)) & " Lac " & FnGetThousandsTwo(Right(intN, Len(intN) – 1)) temp = FnGetUnitDigit(Left(intN, 1)) If temp <> "" Then Str = FnGetUnitDigit(Left(intN, 1)) & " Lac " & FnGetThousandsTwo(Right(intN, Len(intN) – 1)) Else Str = FnGetThousandsTwo(Right(intN, Len(intN) – 1)) End If FnGetLacsOne = Str End Function Function FnGetThousandsTwo(intN) Dim Str 'Str = FnGetTensDigit(Left(intN, 2)) & " Thousand " & FnGetHundreds(Right(intN, Len(intN) – 2)) temp = FnGetTensDigit(Left(intN, 2)) If temp <> "" Then Str = FnGetTensDigit(Left(intN, 2)) & " Thousand " & FnGetHundreds(Right(intN, Len(intN) – 2)) Else Str = FnGetHundreds(Right(intN, Len(intN) – 2)) End If FnGetThousandsTwo = Str End Function Function FnGetThousandsOne(intN) Dim Str 'Str = FnGetUnitDigit(Left(intN, 1)) & " Thousand " & FnGetHundreds(Right(intN, Len(intN) – 1)) temp = FnGetUnitDigit(Left(intN, 1)) If temp <> "" Then Str = FnGetUnitDigit(Left(intN, 1)) & " Thousand " & FnGetHundreds(Right(intN, Len(intN) – 1)) Else Str = FnGetHundreds(Right(intN, Len(intN) – 1)) End If FnGetThousandsOne = Str End Function Function FnGetHundreds(intN) Dim Str temp = FnGetUnitDigit(Left(intN, 1)) If temp <> "" Then Str = FnGetUnitDigit(Left(intN, 1)) & " Hundred " & FnGetTensDigit(Right(intN, 2)) Else Str = FnGetTensDigit(Right(intN, 2)) End If FnGetHundreds = Trim(Str) End Function Function FnGetTensDigit(intN) Dim Str If Left(intN, 1) = 1 Then Select Case Val(intN) Case 10: Str = "Ten" Case 11: Str = "Eleven" Case 12: Str = "Twelve" Case 13: Str = "Thirteen" Case 14: Str = "Fourteen" Case 15: Str = "Fifteen" Case 16: Str = "Sixteen" Case 17: Str = "Seventeen" Case 18: Str = "Eighteen" Case 19: Str = "Nineteen" End Select Else Select Case Val(Left(intN, 1)) Case 2: Str = "Twenty" Case 3: Str = "Thirty" Case 4: Str = "Fourty" Case 5: Str = "Fifty" Case 6: Str = "Sixty" Case 7: Str = "Seventy" Case 8: Str = "Eighty" Case 9: Str = "Ninty" End Select Str = Str & " " & FnGetUnitDigit(Right(intN, 1)) End If FnGetTensDigit = Trim(Str) End Function Function FnGetUnitDigit(intN) Dim Str Select Case Val(intN) Case 1: Str = "One" Case 2: Str = "Two" Case 3: Str = "Three" Case 4: Str = "Four" Case 5: Str = "Five" Case 6: Str = "Six" Case 7: Str = "Seven" Case 8: Str = "Eight" Case 9: Str = "Nine" End Select FnGetUnitDigit = Trim(Str) End Function

view raw
NumberToWords.vb
hosted with ❤ by GitHub

### 45 thoughts on “VBA-Excel: Convert Numbers (Rupees) into Words OR Text – Updated Till 1000000 Crore With Decimal Numbers”

1. Its superb. As i am in project management it helps me a lot.

Thank u

• You r very welcome arun 🙂

2. Dear Sumit,

3. Pls trouble me again for any further queries 😉

4. It helped me a lot. please provide me the code for numbers up to 13 digits and preferably up to 15 digits (whole numbers).

• Updated till 999 Crores…

Sumit

5. Need This Function Till 1000 crores, Thanks ….

• Updated till 999 Crores…

Sumit

6. Hi Mr. Sumit,

Nice to see a Indian Excel expert, otherwise I always get foreigners.
By the way,
I want to lock some of cells in all worksheet(including adding new worksheet) within a workbook, and donot select locked cell.

What code should be and where type code i.e in module or at workbook.

Example:
Lock cell (A1:C2) and (D2:F4) and (B1:B12) in worksheet as well as adding new worksheet withing a workbook.

• Thanks Akhilesh :).

Now your another question was how to put it across all the worksheets in the excel, for the you need to navigate through all the sheets, i have used in one of my post , please read this for reference

Hope this helps, let me know it this is not clear.

Thanks
Sumit

7. It helped me a lot and saved time thank you very much

• Good to know that its useful.
Thanks for using.

Sumit

8. Hi Sumit,
Many thanks for your code. It really helps me a lot. The only problem is that it doesn’t handle the part after decimals, so I can’t convert paise to words, e.g. 123.45 = Rupees One Hundred Twenty Three And Paise Forty Five Only.
Can you kindly modify the code to reflect the same? I am a noob with VB. I’ll be really grateful.
Regards,
Zaib.

• Apologies for the late response. The post has been updated for decimal values as well.

Thanks
Sumit Jain

9. Numbers with decimal points do not seem to work.

• The post has been updated for decimal values as well.

Thanks
Sumit Jain

• You worked hard, but in your formula 0.80 converting
that =
” Rupees and Eight paise ‘ whereas it should be
” Rupees Zero and Eighty paise”
As such needs few amendments

• Thanks Ram for finding the defect, will correct it soon. 🙂

10. How to convert “123 = একশত তেইশ টাকা” in excel 2003/2007.
Send me Code.

Contract @ 01722-844142.
Mail: [email protected]

11. Hi,

I have used similar code in my excel. the only issue is for example 6762.66 it reads incorrectly as as “Rupees Six Thousand Seven Hundred Sixty Two and Sixty Five Paisas Only” please help me on this. instead of Sixty six , it reads as “sixty five”

Regards,

• The excel i have shared shows “Rupees Six Thousand Seven Hundred Sixty Two and Sixty Six paise only”, can you share the code you r using so that i can take a look.

• this is the code I am using taken from http://www.yogeshguptaonline.com/2009/07/excel-functions-convert-numbers-into.html?showComment=1442926469103#c6313997018215034694

Function SpellCurr(ByVal MyNumber, _
Optional MyCurrency As String = “Rupee”, _
Optional MyCurrencyPlace As String = “P”, _
Optional MyCurrencyDecimals As String = “Paisa”, _
Optional MyCurrencyDecimalsPlace As String = “S”)

‘*****************************************************************************************************************
‘* Based on SpellNumbers UDF by Microsoft, Which handles only Dollars as currency *
‘* UDF modfied by Yogesh Gupta, [email protected], Ygblogs.blogspot.com on July 21, 2009 *
‘* UDF modified on September 04, 2009 to make currency inputs optional, by default it will use Indian Currency *
‘* This modified UDF can be used for any currency in case you provide for currency inputs *
‘* User can define the Prefix and Sufix place for Currency and CurrencyDecimals *
‘* MyNumber = Numeric Value you need to convert into words *
‘* MyCurrency = Name of your Currency – i.e. Dollar for USA *
‘* MyCurrencyPlace = Prefix or Suffix the currency, use “P” for Prefix and “S” for Suffix *
‘* MyCurrencyDecimals = Name of your Currency Decimals – i.e. Cent for USA *
‘* MyCurrencyDecimalsPlace = Prefix or Suffix the currency decimals, use “P” for Prefix and “S” for Suffix *
‘*****************************************************************************************************************

Dim Rupees, Paisa, Temp
Dim DecimalPlace, Count

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

‘String representation of amount.
MyNumber = Trim(Str(MyNumber))

‘Position of decimal place 0 if none.
DecimalPlace = InStr(MyNumber, “.”)

‘ Convert Paisa and set MyNumber to Rupee amount.
If DecimalPlace > 0 Then
Paisa = GetTens(Left(Mid(MyNumber, DecimalPlace + 1) & _
“00”, 2))
MyNumber = Trim(Left(MyNumber, DecimalPlace – 1))
End If

Count = 1

Do While MyNumber “”
Temp = GetHundreds(Right(MyNumber, 3))
If Temp “” Then Rupees = Temp & Place(Count) & Rupees
If Len(MyNumber) > 3 Then
MyNumber = Left(MyNumber, Len(MyNumber) – 3)
Else
MyNumber = “”
End If
Count = Count + 1

Loop

If MyCurrencyPlace = “P” Then
Select Case Rupees
Case “”
Rupees = MyCurrency & “s” & ” Zero”
Case “One”
Rupees = MyCurrency & ” One”
Case Else
Rupees = MyCurrency & “s ” & Rupees
End Select
Else
Select Case Rupees
Case “”
Rupees = “Zero ” & MyCurrency & “s”
Case “One”
Rupees = “One ” & MyCurrency
Case Else
Rupees = Rupees & ” ” & MyCurrency & “s”
End Select
End If

If MyCurrencyDecimalsPlace = “S” Then
Select Case Paisa
Case “”
Paisa = ” Only”
Case “One”
Paisa = ” and One ” & MyCurrencyDecimals & ” Only”
Case Else
Paisa = ” and ” & Paisa & ” ” & MyCurrencyDecimals & “s Only”
End Select
Else
Select Case Paisa
Case “”
Paisa = ” Only”
Case “One”
Paisa = ” and ” & MyCurrencyDecimals & ” One ” & ” Only”
Case Else
Paisa = ” and ” & MyCurrencyDecimals & “s ” & Paisa & ” Only”
End Select
End If

SpellCurr = Rupees & Paisa

End Function

‘*******************************************
‘ Converts a number from 100-999 into text *
‘*******************************************

Function GetHundreds(ByVal MyNumber)
Dim Result As String
If Val(MyNumber) = 0 Then Exit Function
MyNumber = Right(“000” & MyNumber, 3)
‘ Convert the hundreds place.
If Mid(MyNumber, 1, 1) “0” Then
Result = GetDigit(Mid(MyNumber, 1, 1)) & ” Hundred ”
End If

‘ Convert the tens and ones place.
If Mid(MyNumber, 2, 1) “0” Then
Result = Result & GetTens(Mid(MyNumber, 2))
Else
Result = Result & GetDigit(Mid(MyNumber, 3))
End If
GetHundreds = Result
End Function

‘*********************************************
‘ Converts a number from 10 to 99 into text. *
‘*********************************************
Function GetTens(TensText)

Dim Result As String
Result = “” ‘ Null out the temporary function value.
If Val(Left(TensText, 1)) = 1 Then ‘ If value between 10-19…
Select Case Val(TensText)
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 ‘ If value between 20-99…
Select Case Val(Left(TensText, 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

Result = Result & GetDigit _
(Right(TensText, 1)) ‘ Retrieve ones place.
End If
GetTens = Result
End Function

‘*******************************************
‘ Converts a number from 1 to 9 into text. *
‘*******************************************

Function GetDigit(Digit)
Select Case Val(Digit)
Case 1: GetDigit = “One”
Case 2: GetDigit = “Two”
Case 3: GetDigit = “Three”
Case 4: GetDigit = “Four”
Case 5: GetDigit = “Five”
Case 6: GetDigit = “Six”
Case 7: GetDigit = “Seven”
Case 8: GetDigit = “Eight”
Case 9: GetDigit = “Nine”
Case Else: GetDigit = “”
End Select
End Function

12. And one more thing. It calculates from the column which is having formula.

13. if you want i will share my excel

• share it at [email protected] OR you can start using the excel linked in the post.

14. My VBA Code didnt come fully. Where can i share it.. Thanks

• 15. Wonderful.. Thanks much!!

• 16. set ur decimal upto three points u will get the answer for 65 insteat of 66 paise. check ur format cell please

17. Thanks a lot sumit really appreciate you work…..

18. hello sir,
can you please send me a video clip odf all this method?
it’ll be so nice of you.

• 19. How to Indian number convert to word up to 17 digit number?

How to Indian number convert to word up to 17 digit number in excel sheet?

10000000: Result = ” Crore ”
100000000: Result = “Ten Crores ”
1000000000: Result = “One Hundred Crores”
10000000000: Result = “One Thousand Crores”
100000000000: Result = “Ten Thousand Crores”
1000000000000: Result = “One Lakh Crores”
10000000000000: Result = “Ten Lakh Crores”
100000000000000: Result = “One Hundred Lakh Crores”
1000000000000000: Result = “One Thousand Lakh Crores”
10000000000000000: Result = “Ten Thousand Lakh Crores”

• Only number to word convert please any one guide me.

• can u provide an example of what you are looking for?

• its very simple, you can modify the existing code to work for higher numbers.

20. Hi

You solve my problem upto an extend . Thanks a lot for that.
Is it possible to convert three digits after decimals as I am living in Bahrain and here we are using three digit after decimal.
Example
100.101 One Hundred Bahraini Dinar and Hundred and One fils

• yes, we need to make some simple changes in the code to do that, let me know if u need password for to make these changes or u need any help in making changes

21. i have both of ruppy and doller plz answer

• 22. • 