Convert Currency in Number to Words (Indian Rupees) - MS Excel

Submitted by Karthikeyan on

Cheques, invoices, bills, receipts are needs to have the currency format both in Numerical and words. The below script can be used in Microsoft Excel / Word / Access or any VBA program supported applications to convert the currency in number format to words (English). 

The below script adds 'and' joining word if it has paise (decimal part), otherwise if you want to have 'and' before 10s or 100s please check the following link for the version 2 of this script

Convert Currency in Number to Words (Indian Rupees) - Version 2


Function ConvertCurrencyToEnglish(ByVal MyNumber)
' Edited by Karthikeyan [email protected]
  Dim Temp
         Dim Rupees, Paise
         Dim DecimalPlace, Count
 
         ReDim Place(9) As String
         Place(2) = " Thousand "
         Place(3) = " lakh "
         Place(4) = " Crore "
 
 
         ' 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)
            ' Hi! Note the above line Mid function it gives right portion
            ' after the decimal point
            'if only . and no numbers such as 789. accures, mid returns nothing
            ' to avoid error we added 00
            ' Left function gives only left portion of the string with specified places here 2
 
 
            Paise = ConvertTens(Temp)
 
 
            ' Strip off paise from remainder to convert.
            MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))
         End If
 
         Count = 1
        If MyNumber <> "" Then
 
            ' Convert last 3 digits of MyNumber to Indian 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
 
        End If
 
            ' convert last two digits to of mynumber
            Count = 2
 
            Do While MyNumber <> ""
            Temp = ConvertTens(Right("0" & MyNumber, 2))
 
            If Temp <> "" Then Rupees = Temp & Place(Count) & Rupees
            If Len(MyNumber) > 2 Then
               ' Remove last 2 converted digits from MyNumber.
               MyNumber = Left(MyNumber, Len(MyNumber) - 2)
 
            Else
               MyNumber = ""
            End If
            Count = Count + 1
 
            Loop
 
 
 
 
         ' Clean up rupees.
         Select Case Rupees
            Case ""
               Rupees = ""
            Case "One"
               Rupees = "Rupee One"
            Case Else
               Rupees = "Rupees " & Rupees
         End Select
 
         ' Clean up paise.
         Select Case Paise
            Case ""
               Paise = ""
            Case "One"
               Paise = "One Paise"
            Case Else
               Paise = Paise & " Paise"
         End Select
         
         If Rupees = "" Then
         ConvertCurrencyToEnglish = Paise & " Only"
         ElseIf Paise = "" Then
         ConvertCurrencyToEnglish = Rupees & " Only"
         Else
         ConvertCurrencyToEnglish = Rupees & " and " & Paise & " Only"
         End If
         
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
 
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


Download this

How to use this code?

 

  • Click on Developer Tab in MS office (Word / Excel / Access). If Developer Tab not appears, click here to know the way to enable this. 
  • Click Visual Basic, then VBA application development window will open
  • Now right click in Project pane, insert -> Module

Inserting VBA module in MS Office

  • Now paste the above code and save it as Macro Enabled document. (For excel save with extension .xlsm)
  • Now you can use the formula '=ConvertCurrencyToEnglish()'

Currency in Number to Worlds - Excel

 

 

MS Access & MS Word Implementations

Online converter

 

Update 02-03-2017 : Code updated to show 'Rupee/Rupees' as prefix and 'Only' as suffix.

 

How to use video :

Category

Comments

Submitted by N Drup (not verified) on Jun 29, 2021 - 18:03

Permalink

How to go upto 100 Crs? this code has limitations upto 10 cr.

Submitted by Karthikeyan on May 04, 2020 - 06:22

In reply to by HARSH Mehta (not verified)

Permalink

Hi, please check the latest version

Submitted by stella (not verified) on Apr 26, 2020 - 21:34

In reply to by kiros (not verified)

Permalink

Admin please reply I have same question

Submitted by stella (not verified) on Apr 26, 2020 - 21:22

In reply to by REHMAN (not verified)

Permalink

Please say how to add and in middle as above.

Submitted by stella (not verified) on Apr 26, 2020 - 20:45

Permalink

What if we want number to be converted in below format.please assist.am trying to modify it but couldn't do.

1750-Rupees One thousand seven hundred and fifty only.
176548-Rupees one lakh seventy six thousand five hundred and forty eight only

79056-Rupees seventy nine thousand and fifty six only.

Need to use it daily but couldn't moidfy the code.please assist.

Submitted by Karthikeyan on Mar 22, 2020 - 19:29

In reply to by Rajesh (not verified)

Permalink

Give me more information, so I can check it.

Submitted by Karthikeyan on Mar 22, 2020 - 19:28

In reply to by Rajesh (not verified)

Permalink

Yes, this script will work on all excel versions. But not tested in older versions below 2003.

Submitted by kiros (not verified) on Mar 16, 2020 - 12:39

Permalink

For this "and", what modification should be done?
eg. 669501 = Six Lakh Sixty Nine Thousand Five Hundred And One Only

Submitted by sarvesh Maheshwari (not verified) on Dec 22, 2019 - 09:04

Permalink

What will be this function's google sheet version please update with the same.

Submitted by Rajesh (not verified) on Nov 22, 2019 - 10:37

In reply to by Karthikeyan

Permalink

because im trying this its not working im getting error..

Submitted by Rajesh (not verified) on Nov 22, 2019 - 10:35

In reply to by Karthikeyan

Permalink

Hai Karthik is this permanent script for all excell.

Submitted by admin on Nov 20, 2019 - 08:00

In reply to by cyborg (not verified)

Permalink

Let me know sample values to check

Submitted by cyborg (not verified) on Nov 17, 2019 - 19:22

Permalink

Some times I get a difference of one paise less. How to remove that error?

Submitted by Parul Sahu (not verified) on Aug 20, 2019 - 16:46

Permalink

sir, please give the code which could work in visual basic 2010

Submitted by aCe_vEnTurA2 (not verified) on Feb 28, 2019 - 14:22

In reply to by admin

Permalink

Thanks a million. That helped a lot. You are a star :)

Submitted by Nories Wilson (not verified) on Dec 11, 2018 - 09:57

Permalink

Greetings!

Thank you very much brooo i was searching this last three days i got lots of option, but it is pure and good as i need...

Nories Wilson

Submitted by Chetan (not verified) on Jul 27, 2018 - 19:04

In reply to by Karthikeyan

Permalink

where to save this file, and I am not able to see the save as option as "default template" Pl help

Submitted by varinder singh (not verified) on Jul 13, 2018 - 08:25

Permalink

Thanks team, This code is wonderful and very usefull for me.

Submitted by Balu (not verified) on May 26, 2018 - 17:05

Permalink

Dear friends, the above code is perfectly working. But I'm facing pronlem with the new files. If i open new Excel work book and try to change the number into words, the function is not displaying. What should I do so that this code works for all the work books?

Submitted by harichand (not verified) on May 25, 2018 - 11:58

Permalink

This is the good job , thanks for this , but is have one problem in this if i don't want rupees in front for that what i should do.
please help me

Submitted by Karthikeyan on Apr 23, 2018 - 19:46

In reply to by Ritesh (not verified)

Permalink

You have to save the file as default template to activate it by default.

Submitted by Ritesh (not verified) on Apr 20, 2018 - 19:42

In reply to by Karthikeyan

Permalink

i tried saving it .xlsm but it works in the same file not on all new excel files

Submitted by Abhinav Binkar (not verified) on Apr 04, 2018 - 13:07

In reply to by Karthikeyan

Permalink

Can you help me with this.
If the value is 0.00 then it should come as "Rupees NIL only".

Submitted by Sourav Lubana (not verified) on Mar 29, 2018 - 00:38

Permalink

Hi,, Can you help me in reaching result for the following figures:-
1) Rs 1,00,00,00,000 result in words as Rupees One Hundred Crore Only
2) Rs.1,00,00,00,001 result in words as Rupees One Hundred Crore One Only
3) Rs. 10,00,00,00,000 result in words as Rupees Ten Hundred Crore Only
4) Rs. 10,00,00,00,001 result in words as Rupees Ten Hundred Crore One Only
5) Rs. 19,22,45,67,891 result in words as Rupees Nineteen Hundred TwentyTwo Crore
FortyFive Lakh SixtySeven Thousand Eight Hundred Ninety One Only.

Submitted by Karthikeyan on Mar 28, 2018 - 07:35

In reply to by Gaurav Gupta (not verified)

Permalink

Yes, change the number to round figure using formula, before using this convert formula.

Submitted by Gaurav Gupta (not verified) on Mar 28, 2018 - 01:33

Permalink

It worked and saved lot of time.
Only issue i want to get resolved is : I do not want digits to be converted after decimal place. What do i have to change in code??? I have changed my digits in round figure. So i do not want decimal places to be shown in words. Kindly help

Submitted by admin on Mar 08, 2018 - 12:35

In reply to by aCe_vEnTurA2 (not verified)

Permalink

If you want it as default in all new workbooks, change the Excels default template, for this purpose first you have to save the macro enabled workbook as Excel template. Then, set Excel to start with that template by default. https://support.office.com/...

Submitted by aCe_vEnTurA2 (not verified) on Mar 08, 2018 - 11:07

Permalink

I am sorry I am new to Excel. I am not able to go ahead of "and save it as Macro Enabled document. (For excel save with extension .xlsm)" Do I have to do this for each and every worksheet I want it in or can I just add it to excel so that it works for whichever sheet I open. Also I do not see any option of "save as" in the module. So how can I save it as .xlsm ?

Submitted by Shufa S (not verified) on Feb 23, 2018 - 17:26

In reply to by admin

Permalink

Where do I send this? Please give me your email address

Submitted by admin on Feb 23, 2018 - 17:18

In reply to by Shufa S (not verified)

Permalink

Pls send me the file with sample data.

Submitted by Shufa S (not verified) on Feb 23, 2018 - 17:05

Permalink

I am getting this error #NAME?
I have saved the file in .xlsm as suggested.

Submitted by admin on Feb 16, 2018 - 12:56

In reply to by gudapati nages… (not verified)

Permalink

1) Try saving the file in local instead of network.
2) Save as Macrol enabled workbook (.xlsm)
3) Create a new excel file and try the above 2 steps after adding the conversion code.

Submitted by gudapati nages… (not verified) on Feb 16, 2018 - 11:55

In reply to by admin

Permalink

PREVIOUS SAVED FILES ALSO NOT OPEN SIR

Submitted by admin on Feb 16, 2018 - 11:30

In reply to by mohammed faisal (not verified)

Permalink

Save the file as Macro enabled workbook (.xlsm)

Submitted by admin on Feb 16, 2018 - 11:29

In reply to by gudapati nages… (not verified)

Permalink

Did you save the file with .xlsm format? Save the file as Macro enabled workbook (.xlsm).

Submitted by Kamal Bharakhda (not verified) on Feb 16, 2018 - 04:24

Permalink

Admin, does this code works in Early Binding and Late Binding?

Submitted by gudapati nages… (not verified) on Feb 09, 2018 - 10:13

In reply to by gudapati nages… (not verified)

Permalink

SIR,
AWAITING FOR YOUR REPLY SIR

Submitted by mohammed faisal (not verified) on Dec 31, 2017 - 22:41

Permalink

if i close the xcel file the module which i have created vanishes...need Assistance..

Submitted by saravanan (not verified) on Dec 28, 2017 - 16:21

Permalink

Dear sir, the above converter is perfectly working, but while i close and open the file i got this error message
#NAME
Please help me

Submitted by Bikas (not verified) on Dec 09, 2017 - 16:39

In reply to by Kalyan Babu C (not verified)

Permalink

Can you help me?

Submitted by Rohit Kulshreshtha (not verified) on Dec 06, 2017 - 00:26

Permalink

Wow... this is amazing..thank you very much

Submitted by Aditya Naman Singh (not verified) on Nov 16, 2017 - 00:10

Permalink

sir if i want of one trillion ??? please help

Submitted by Deepak (not verified) on Nov 13, 2017 - 21:03

Permalink

Worked very well. Thank you.

Submitted by Karthikeyan on Nov 13, 2017 - 20:18

In reply to by Imran Habib (not verified)

Permalink

Please save the file with .xlsm extension (Macro-enabled workbook)