How to convert Numbers to Words in Indian Currency Format – VBA Macros

How to convert Numbers to Words in Indian Currency Format

There are almost 200+ similar requests from our page followers to how to convert numbers to words, below given code will suit to all the queries at the best. Hope this helps.

How to create the function Called SpellNumber()
1) Start Microsoft Excel.
2) Press ALT+F11 to start the Visual Basic Editor.
3) On the Insert menu, click Module.
4) Copy the following code into the module sheet.

Save the file as Excel 97-2003 (XLS) or Excel Macro Enabled (XLSM) Workboook, otherwise you will lose the macro. [Enclosed sample file at bottom]

How to convert Numbers to Words in Indian Currency Format

'================================
 'Code
 '================================
 Function SpellNumber(ByVal MyNumber, Optional incRupees As Boolean = True)
 Dim Crores, Lakhs, Rupees, Paise, Temp
 Dim DecimalPlace As Long, Count As Long
 Dim myLakhs, myCrores
 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 Paise and set MyNumber to Rupees amount.
 If DecimalPlace > 0 Then
 Paise = GetTens(Left(Mid(MyNumber, DecimalPlace + 1) & "00", 2))
 MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))
 End If
myCrores = MyNumber  10000000
 myLakhs = (MyNumber - myCrores * 10000000)  100000
 MyNumber = MyNumber - myCrores * 10000000 - myLakhs * 100000
 Count = 1
 Do While myCrores <> ""
 Temp = GetHundreds(Right(myCrores, 3))
 If Temp <> "" Then Crores = Temp & Place(Count) & Crores
 If Len(myCrores) > 3 Then
 myCrores = Left(myCrores, Len(myCrores) - 3)
 Else
 myCrores = ""
 End If
 Count = Count + 1
 Loop
 Count = 1
Do While myLakhs <> ""
 Temp = GetHundreds(Right(myLakhs, 3))
 If Temp <> "" Then Lakhs = Temp & Place(Count) & Lakhs
 If Len(myLakhs) > 3 Then
 myLakhs = Left(myLakhs, Len(myLakhs) - 3)
 Else
 myLakhs = ""
 End If
 Count = Count + 1
 Loop
 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
Select Case Crores
 Case "": Crores = ""
 Case "One": Crores = " One Crore "
 Case Else: Crores = Crores & " Crores "
 End Select
Select Case Lakhs
 Case "": Lakhs = ""
 Case "One": Lakhs = " One Lakh "
 Case Else: Lakhs = Lakhs & " Lakhs "
 End Select
 Select Case Rupees
 Case "": Rupees = "Zero "
 Case "One": Rupees = "One "
 Case Else:
Rupees = Rupees
 End Select
 Select Case Paise
 Case "": Paise = ""
 Case "One": Paise = " and One Paise"
 Case Else: Paise = " and " & Paise & " Paise"
 End Select
 SpellNumber = IIf(incRupees, "Rupees ", "") & Crores & _
 Lakhs & Rupees & Paise & " Only "
 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
'================================
 'Code
 '================================

Download Example File Convert Numbers To Words.xls

Also read


3

5 Responses

Show all responses
  1. Zahidullah Mohmand
    January 28, 2016
    • Quad Excel
      January 29, 2016
      • Rituraj Sarma
        August 11, 2016
  2. Chinmoy
    December 9, 2016
  3. KAPIL PATHAK
    February 16, 2017

Leave a Reply