Amount in Numbers To Words – Both Million & Crores
Get Amount converted from Number to Words both in Millions & Crores format.
In many accounting, billing & invoicing Excel app, we need to convert the Amounts in Numbers To Words.
It was older convention to write down using pen in numbers & words to double confirm that no one changes the numbers after a transaction is confirmed.
So, for the same convention, the modern automated billing, invoice apps also follow this method.
SpellNumbers – Amount to Words – Rupee & Dollar
It can create words for number formats in thousand, Million, Billion & up to trillion. In case if you are looking for Indian Number formatting in Lakhs, Crores – it is still under development.
Option Explicit 'SpellNumber 'Function Converts Number to Words '0 for US format, 1 for Indian Format Function Num2Words(iAmtNumber As Double, iCurrencyFormat As Integer) As String Dim sAmt As String, sDecimal As String, sText As String Dim sResultWords As String, sResultWordsDecimal As String Dim CurrencyUnit As String, CurrencylUnitDecimal As String Dim iDecimalIdx, iPlaceIdx As Double Dim bFirstEntry As Boolean, dCurrencyFormatSplit As Double CurrencyUnit = "Dollars" CurrencylUnitDecimal = "Cents" 'US Number Format String - Dollars & Cents Dim sPlace0(9) As String sPlace0(2) = " Thousand " sPlace0(3) = " Million " sPlace0(4) = " Billion " sPlace0(5) = " Trillion " 'Indian Number Format String - Rupees & Paise Dim sPlace1(9) As String sPlace1(2) = " Thousand " sPlace1(3) = " Lakhs " sPlace1(4) = " Crores " 'Pre Process Amount Numbers sAmt = VBA.Trim(VBA.Str(iAmtNumber)) sAmt = VBA.Replace(sAmt, ",", "", , , vbTextCompare) sAmt = VBA.Replace(sAmt, " ", "", , , vbTextCompare) 'Split Decimal & Integer Part iDecimalIdx = VBA.InStr(sAmt, ".") If iDecimalIdx > 0 Then sDecimal = VBA.Mid(sAmt, iDecimalIdx + 1, 2) sAmt = VBA.Mid(sAmt, 1, iDecimalIdx - 1) 'Get Decimals to Words sResultWordsDecimal = GetTens(sDecimal) sResultWordsDecimal = sResultWordsDecimal & " " & CurrencylUnitDecimal End If 'Process Amount Each Thousand sText = "" iPlaceIdx = 1 'First Thousand in Amount If sAmt <> "" Then sText = GetHundreds(VBA.Right(sAmt, 3)) If sText <> "" Then sResultWords = sText If VBA.Len(sAmt) > 3 Then sAmt = VBA.Left(sAmt, VBA.Len(sAmt) - 3) Else sAmt = "" End If iPlaceIdx = iPlaceIdx + 1 End If 'Remaining Digits in Amount Do While sAmt <> "" If iCurrencyFormat > 0 Then sText = GetTens(VBA.Right(sAmt, 2)) If sText <> "" Then sResultWords = sText & sPlace1(iPlaceIdx) & sResultWords If VBA.Len(sAmt) > 2 Then sAmt = VBA.Left(sAmt, VBA.Len(sAmt) - 2) Else sAmt = "" End If Else sText = GetHundreds(VBA.Right(sAmt, 3)) If sText <> "" Then sResultWords = sText & sPlace0(iPlaceIdx) & sResultWords If VBA.Len(sAmt) > 3 Then sAmt = VBA.Left(sAmt, VBA.Len(sAmt) - 3) Else sAmt = "" End If End If iPlaceIdx = iPlaceIdx + 1 Loop sResultWords = sResultWords & " " & CurrencyUnit If sResultWordsDecimal <> "" Then sResultWords = sResultWords & " and " & sResultWordsDecimal End If Num2Words = sResultWords & " Only" End Function ' Converts a number from 100-999 into text Function GetHundreds(ByVal numAmt) Dim Result As String If Val(numAmt) = 0 Then Exit Function numAmt = Right("000" & numAmt, 3) ' Convert the hundreds place. If Mid(numAmt, 1, 1) <> "0" Then Result = GetDigit(Mid(numAmt, 1, 1)) & " Hundred " End If ' Convert the tens and ones place. If Mid(numAmt, 2, 1) <> "0" Then Result = Result & GetTens(Mid(numAmt, 2)) Else Result = Result & GetDigit(Mid(numAmt, 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 VBA.Len(TensText) < 2 Then Result = GetDigit(TensText) GetTens = Result Exit Function End If 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
This code can be used a User defined function. i.e., the function can be used directly in the Excel worksheet.
Example: =num2words(123) will give output as “One Hundred Twenty Three Dollars and No Cents”.
If the currency format is different from Dollars, change the corresponding field in the code. This code will display the amount in the specific currency format as per users input.
External Reference (SpellNumber Function) :
The three important supporting functions GetHundreds, GetTens, GetDigit are copied from this page. The main function is altered to incorporate different currency formats.