Your cart is currently empty!
How to Convert Numbers to Words in Indian Rupees in Excel (With VBA)
💰 How to Convert Numbers to Words in Indian Rupees in Excel
Excel doesn’t have a built-in function to convert numbers to words (like “12345” → “Twelve Thousand Three Hundred Forty-Five”) — especially not in the Indian currency format like “Rupees Twelve Thousand Three Hundred Forty-Five Only”.
But you can achieve this using a custom VBA function.
✅ Step-by-Step Guide: Convert Numbers to Words in Indian Rupees
🧩 Step 1: Open VBA Editor
- Press
Alt + F11
to open the Visual Basic for Applications (VBA) editor. - Go to Insert > Module.
✍️ Step 2: Paste the VBA Code
Paste the following code into the module window:
Function ConvertToRupees(ByVal MyNumber)
Dim Units As String
Dim SubUnits As String
Dim TempStr As String
Dim Rupees As String
Dim Paise As String
Dim DecimalPlace As Integer
Dim Count As Integer
Dim Place(9) As String
Dim NumDigit As Integer
Dim Digit As Integer
Dim MyNum As String
Dim DecimalPart As String
Place(2) = " Thousand "
Place(3) = " Lakh "
Place(4) = " Crore "
' Convert MyNumber to string and find position of decimal
MyNumber = Trim(Str(MyNumber))
DecimalPlace = InStr(MyNumber, ".")
' Split rupees and paise
If DecimalPlace > 0 Then
Paise = GetTens(Left(Mid(MyNumber, DecimalPlace + 1) & "00", 2))
MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))
End If
Count = 1
Do While MyNumber <> ""
If Count = 1 Then
TempStr = GetHundreds(Right(MyNumber, 3))
If Len(MyNumber) > 3 Then
MyNumber = Left(MyNumber, Len(MyNumber) - 3)
Else
MyNumber = ""
End If
Else
TempStr = GetTens(Right(MyNumber, 2))
If Len(MyNumber) > 2 Then
MyNumber = Left(MyNumber, Len(MyNumber) - 2)
Else
MyNumber = ""
End If
End If
If TempStr <> "" Then Rupees = TempStr & Place(Count) & Rupees
Count = Count + 1
Loop
ConvertToRupees = "Rupees " & Rupees & IIf(Paise <> "", " and " & Paise & " Paise", "") & " Only"
End Function
Private Function GetHundreds(ByVal MyNumber)
Dim Result As String
If Val(MyNumber) = 0 Then Exit Function
MyNumber = Right("000" & MyNumber, 3)
If Mid(MyNumber, 1, 1) <> "0" Then
Result = GetDigit(Mid(MyNumber, 1, 1)) & " Hundred "
End If
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
Private Function GetTens(TensText)
Dim Result As String
If Val(Left(TensText, 1)) = 1 Then
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
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))
End If
GetTens = Result
End Function
Private 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
🧪 Step 3: Use the Function in Excel
After saving the VBA code:
- Go back to your Excel sheet.
- In any cell, enter:
=ConvertToRupees(123456.78)
or
=ConvertToRupees(A2)
*** Here A2 Cell contains numbers
Output:Rupees One Lakh Twenty Three Thousand Four Hundred Fifty Six and Seventy Eight Paise Only
📌 Notes:
- Works with Indian Numbering System (Thousand, Lakh, Crore).
- You must enable macros to use this function.
- Use it in billing templates, invoices, payment receipts, etc.
📣 Learn More Excel Automation Like This!
🎓 Join My Excel Mastery Course
Includes advanced functions, automation using VBA, and business templates with Indian formats.
✅ Here is your ready-to-use Excel template to convert numbers to words in Indian Rupees:
📌 Important:
This file includes:
- Sample amounts in column A
- A formula in column B using
=ConvertToRupees(...)
- This is Macro enabled file. So you may get the warning. Just enabled the content if you are getting message in yellow and you are good to go.
Breakdown of Excel VBA Function
🔹 OVERVIEW OF THE MAIN FUNCTION: ConvertToRupees(ByVal MyNumber)
This is the main function you call. It takes a numeric value (like 12345.50
) and converts it into a full “Rupees … and … Paise” string.
🔸 STEP 1: Variable Declarations
vbaCopyEditDim Units As String, SubUnits As String, TempStr As String
Dim Rupees As String, Paise As String
Dim DecimalPlace As Integer, Count As Integer
Dim Place(9) As String
Rupees
: Final string for rupee part.Paise
: Final string for decimal part.Place()
: Array for Indian numbering system—Thousand, Lakh, Crore, etc.Count
: Keeps track of digit positions (units, thousands, lakhs…).TempStr
: Stores interim word values as they’re built.
vbaCopyEditPlace(2) = " Thousand "
Place(3) = " Lakh "
Place(4) = " Crore "
🔸 STEP 2: Handle Decimal and Integer Split
vbaCopyEditMyNumber = Trim(Str(MyNumber))
DecimalPlace = InStr(MyNumber, ".")
- Converts the number to string, and finds the position of the decimal point (if it exists).
- For example,
12345.50
becomes:- Rupee part:
12345
- Paise part:
50
- Rupee part:
vbaCopyEditIf DecimalPlace > 0 Then
Paise = GetTens(Left(Mid(MyNumber, DecimalPlace + 1) & "00", 2))
MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))
End If
- Extracts the paise part using the
GetTens
function (explained later). - Ensures at least 2 digits by appending
"00"
and trimming.
🔸 STEP 3: Main Loop to Build Words for Rupee Part
vbaCopyEditCount = 1
Do While MyNumber <> ""
- Processes the rupee part in blocks of 3 or 2 digits, depending on the Indian number system.
vbaCopyEditIf Count = 1 Then
TempStr = GetHundreds(Right(MyNumber, 3))
- First time, take the last 3 digits (i.e., units, tens, hundreds).
vbaCopyEditElse
TempStr = GetTens(Right(MyNumber, 2))
- From second iteration onwards, take 2 digits at a time (i.e., thousands, lakhs, crores).
vbaCopyEditIf TempStr <> "" Then Rupees = TempStr & Place(Count) & Rupees
Count = Count + 1
- Adds the word form to
Rupees
, prepending appropriate place name.
🔸 STEP 4: Final Formatting
vbaCopyEditConvertToRupees = "Rupees " & Rupees & IIf(Paise <> "", " and " & Paise & " Paise", "") & " Only"
- Constructs the final string like:
“Rupees Twelve Thousand Three Hundred Forty Five and Fifty Paise Only”
🔹 SUPPORTING FUNCTIONS
🔸 GetHundreds(MyNumber)
- Converts a 3-digit number into words.
- Example:
"345"
→"Three Hundred Forty Five"
vbaCopyEditMyNumber = Right("000" & MyNumber, 3)
- Pads numbers like
"45"
to"045"
for consistent processing.
vbCopyEditIf Mid(MyNumber, 1, 1) <> "0" Then
Result = GetDigit(Mid(MyNumber, 1, 1)) & " Hundred "
- If the hundred’s digit is not zero, convert it (e.g., 3 → “Three Hundred”).
vbaCopyEditIf Mid(MyNumber, 2, 1) <> "0" Then
Result = Result & GetTens(Mid(MyNumber, 2))
Else
Result = Result & GetDigit(Mid(MyNumber, 3))
End If
- Handles the remaining 2 digits using
GetTens
.
🔸 GetTens(TensText)
- Converts 2-digit numbers to words.
- Example:
"45"
→"Forty Five"
,"19"
→"Nineteen"
vbaCopyEditIf Val(Left(TensText, 1)) = 1 Then
Select Case Val(TensText)
Case 10: Result = "Ten"
Case 11: Result = "Eleven"
...
- Handles special case of numbers from 10 to 19.
vbaCopyEditElse
Select Case Val(Left(TensText, 1))
Case 2: Result = "Twenty "
Case 3: Result = "Thirty "
...
- Handles the tens place (20, 30, 40…).
vbaCopyEditResult = Result & GetDigit(Right(TensText, 1))
- Adds the unit place digit (e.g., 4 in 34).
🔸 GetDigit(Digit)
- Converts a single digit to its word form.
- E.g.,
1
→"One"
,9
→"Nine"
🔚 SUMMARY FLOW
mathematicaCopyEditInput → "12345.50"
↓
Split to "12345" (Rupees) and "50" (Paise)
↓
Break into 3-2-2: 12 (Thousand), 345
↓
→ "Twelve Thousand Three Hundred Forty Five"
→ "Fifty Paise"
↓
Output → "Rupees Twelve Thousand Three Hundred Forty Five and Fifty Paise Only"
Best selling products
-
Google Drive Mastery: Learn to Streamline Your Digital Workspace in 27 Minutes
Original price was: ₹999.00.₹949.00Current price is: ₹949.00. -
Gmail Mastery: Advanced Training for Efficient Email Management
Original price was: ₹899.00.₹849.00Current price is: ₹849.00. -
Excel Formulas Masterclass: Unlocking Data Analysis Power
₹999.00 -
Excel Course in Hindi: Basic to Advanced Level
Original price was: ₹2,299.00.₹2,249.00Current price is: ₹2,249.00. -
MS Office Online Course: Basic to Advance Level
Original price was: ₹2,999.00.₹2,499.00Current price is: ₹2,499.00. -
Mastering MS Office in Hindi: Excel, MS Access, PowerPoint, and MS Word Training
Original price was: ₹1,999.00.₹1,499.00Current price is: ₹1,499.00. -
Gmail Mastery Training in Hindi: Unlocking Advanced Email Management Technique
Original price was: ₹899.00.₹849.00Current price is: ₹849.00. -
Bajaj Pulsar NS125 UG ABS Motorcycle