Convert numbers into words in Excel – A comprehensive guide
Converting numbers to written words is often needed for financial reports, legal documents, invoices, or checks. While Excel doesn't offer this functionality out of the box, there are several reliable ways to achieve it, ranging from built-in Microsoft 365 functions to VBA user-defined functions and powerful third-party add-ins. This comprehensive guide walks you through each method, highlights their advantages and limitations, and helps you choose the best approach for your specific needs.

- Use new built-in functions (Microsoft 365 Only)
- Use VBA user-defined function
- Use Kutools for Excel with a few clicks
Methods to convert numbers to words in Excel
This section introduces three effective methods for converting currency numbers to words in Excel. Choose the one that best suits your version of Excel and your use case.
Method 1: Use new built-in functions (Microsoft 365 Only)
If you're using Excel for Microsoft 365, you can take advantage of the new TRANSLATE function to easily convert currency numbers to words using a creative formula combination.
As shown in the screenshot below, to convert the currency numbers in the range A2:A5 to words, you can apply the following formula to get it done.
- Select a blank cell (e.g. B2), enter the formula below. =PROPER(SUBSTITUTE(SUBSTITUTE(LOWER(TRANSLATE(BAHTTEXT(B9),"th","en")),"baht","dollars"),"satang","cents"))
- Press "Enter" and drag the "Fill Handle" down to apply it to other rows.
How the formula works:
- BAHTTEXT: Converts the number to Thai-baht text (e.g., “หนึ่งบาทถ้วน”).
- TRANSLATE(...,"th","en"): Translates text from one language to another (requires Microsoft 365). In this case, it translates Thai to English.
- LOWER(): Converts the entire string to lowercase for consistency.
- SUBSTITUTE(): Replaces currency words like "baht" and "satang" with your desired terms.
- PROPER(): Capitalizes the first letter of each word for proper formatting.
Adapt for other currencies:
The above formula outputs US dollars. You can customize it for other currencies by replacing the major and minor units:
- Replace "dollars" with your target currency's major unit, such as "pounds" for British Pound.
- Replace "cents" with the minor unit, such as "pence" for British Pound.
The following table lists compatible currencies and the corresponding formulas you can use:
Currency | Major Unit Replacement | Minor Unit Replacement | Example Formula (Assuming value is in cell A2) |
---|---|---|---|
USD | dollars | cents | =PROPER(SUBSTITUTE(SUBSTITUTE(LOWER(TRANSLATE(BAHTTEXT(A2),"th","en")),"baht","dollars"),"satang","cents")) |
GBP | pounds | pence | =PROPER(SUBSTITUTE(SUBSTITUTE(LOWER(TRANSLATE(BAHTTEXT(A2),"th","en")),"baht","pounds"),"satang","pence")) |
EUR | euros | cents | =PROPER(SUBSTITUTE(SUBSTITUTE(LOWER(TRANSLATE(BAHTTEXT(A2),"th","en")),"baht","euros"),"satang","cents")) |
MYR | ringgit | sen | =PROPER(SUBSTITUTE(SUBSTITUTE(LOWER(TRANSLATE(BAHTTEXT(A2),"th","en")),"baht","ringgit"),"satang","sen")) |
Limitations of this method:
- Only works in Excel for Microsoft 365 (due to TRANSLATE() function).
- Output depends heavily on the accuracy of BAHTTEXT() formatting.
- This method is suited for currencies that, like Thai Baht, have both a main unit and a subunit (e.g., dollars and cents). It is not recommended for currencies that do not follow a similar currency structure.
Method 2: Use VBA user-defined function
In this section, you'll learn how to use a VBA-based User Defined Function (UDF) to convert numeric values into English currency words—specifically tailored for U.S. Dollars (USD) by default.
Step 1: Insert VBA code
- Open the worksheet where you want to use this feature.
- Press "Alt" + "F11" to open the "Microsoft Visual Basic for Applications" window.
- In the editor, click "Insert" > "Module", and paste the following VBA code.
Function SpellNumberToEnglish(ByVal pNumber) 'Update by Extendoffice Dim Dollars, Cents arr = Array("", "", " Thousand ", " Million ", " Billion ", " Trillion ") pNumber = Trim(Str(pNumber)) xDecimal = InStr(pNumber, ".") If xDecimal > 0 Then Cents = GetTens(Left(Mid(pNumber, xDecimal + 1) & "00", 2)) pNumber = Trim(Left(pNumber, xDecimal - 1)) End If xIndex = 1 Do While pNumber <> "" xHundred = "" xValue = Right(pNumber, 3) If Val(xValue) <> 0 Then xValue = Right("000" & xValue, 3) If Mid(xValue, 1, 1) <> "0" Then xHundred = GetDigit(Mid(xValue, 1, 1)) & " Hundred " End If If Mid(xValue, 2, 1) <> "0" Then xHundred = xHundred & GetTens(Mid(xValue, 2)) Else xHundred = xHundred & GetDigit(Mid(xValue, 3)) End If End If If xHundred <> "" Then Dollars = xHundred & arr(xIndex) & Dollars End If If Len(pNumber) > 3 Then pNumber = Left(pNumber, Len(pNumber) - 3) Else pNumber = "" End If xIndex = xIndex + 1 Loop Select Case Dollars Case "" Dollars = "No Dollars" Case "One" Dollars = "One Dollar" Case Else Dollars = Dollars & " Dollars" End Select Select Case Cents Case "" Cents = " and No Cents" Case "One" Cents = " and One Cent" Case Else Cents = " and " & Cents & " Cents" End Select SpellNumberToEnglish = Dollars & Cents End Function Function GetTens(pTens) Dim Result As String Result = "" If Val(Left(pTens, 1)) = 1 Then Select Case Val(pTens) 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(pTens, 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(pTens, 1)) End If GetTens = Result End Function Function GetDigit(pDigit) Select Case Val(pDigit) 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
- Press "Alt" + "Q" to return to the worksheet.
Step 2: Apply the function
- In a cell, enter the formula below and press "Enter". =SpellNumberToEnglish(A2)
- Then drag the fill handle to apply it to other rows as needed. Your numbers will now be spelled out in words like:
Adapt for other currencies:
The function outputs values in “Dollar(s)” and “Cent(s)”, which are hardcoded for USD only. If you want to convert numbers into other currencies, for example, "British Pound", you need to manually change the major and minor units in the following code lines.

Save the workbook as a macro-enabled file
By default, VBA functions will not be retained unless the workbook is saved as a macro-enabled workbook:
- Press "Ctrl" + "S" to save.
- And select the "Go back" button in the pop-up message about macros. Note: If the pop-up shows only "Yes", "No" and "Help", click "No".
- In the "Save As" window.
- Choose a save location.
- Select "Excel Macro-Enabled Workbook (*.xlsm)" in the "Save as type" drop-down list.
- Click "Save".
Limitations of the SpellNumberToEnglish VBA Function
- This function only generates results in English.
- It doesn’t support other languages (e.g., French, German), nor does it handle currency structures where the currency unit comes before the number (e.g., “Rupees One Hundred” in Indian English).
- If you don't save the workbook as a macro-enabled workbook (.xlsm), the function will be lost when you close Excel.
- If saved as a normal .xlsx file, all VBA code will be stripped out.
- Sending the macro-enabled file to others will trigger a “Security Warning – Macros have been disabled” prompt when opened.
- Some users may hesitate to enable macros, fearing potential security risks, and may choose not to use the file.
- Any changes to currency terms or formatting require editing the VBA code manually.
- Not ideal for users unfamiliar with macros or scripting.
Method 3: Use Kutools for Excel (No formulas or VBA needed)
If you install "Kutools for Excel", use its "Numbers to Words" feature to convert numbers into English (currency or plain), dozens of other languages and currencies like EUR, GBP, JPY, etc.
If you're looking for a no-code, user-friendly, and versatile solution to convert numbers to words in Excel, Kutools for Excel offers a dedicated “Numbers to Words” feature that supports:
- English (USD, GBP, EUR, etc.)
- Dozens of other languages and currencies (e.g., Japanese Yen, Indian Rupee, Chinese Yuan)
- Currency format or plain words (e.g., "One Hundred Twenty-Three" instead of "One Hundred Twenty-Three Dollars")
Steps to use:
- Select the cells that contain the numbers you want to convert.
- Select "Kutools" > "Content" > "Numbers to Words".
- In the "Numbers to Currency Word" dialog box, you need to:
- Choose the language and currency style you prefer (e.g. English – United States for USD)
- Click "OK".
Optional: Tick "Not converted to currency" if you want plain English words (without "dollars" or "cents").
Your selected numbers will now be converted into the appropriate currency words, depending on your settings.
Kutools for Excel - Supercharge Excel with over 300 essential tools. Enjoy permanently free AI features! Get It Now
Reverse operation: Convert currency words to numbers
If you have a list of currency amounts written out in English words, like:
and you want to convert them to actual numbers in Excel (e.g., 123.45), you can use a custom VBA User Defined Function (UDF) as follows.

Step 1: Open the VBA Editor and insert VBA code
- Open your Excel workbook.
- Press "Alt" + "F11" to open the "Microsoft Visual Basic for Applications (VBA)" editor.
- In the VBA editor, click "Insert" > "Module".
- Copy and paste the following VBA code into the blank module window:
Function WordsToNumber(ByVal Txt As String) As Double 'Updated by Extendoffice Dim x As Object: Set x = CreateObject("Scripting.Dictionary") Dim units, tens, specials Dim part As String, parts() As String Dim total As Double, partial As Double, multiplier As Double Dim i As Long, word As String Txt = LCase(Trim(Txt)) Txt = Replace(Txt, ",", "") Txt = Replace(Txt, "-", " ") Txt = Replace(Txt, " and ", " ") Txt = Replace(Txt, " ", " ") ' Setup basic number words x.Add "zero", 0: x.Add "one", 1: x.Add "two", 2: x.Add "three", 3 x.Add "four", 4: x.Add "five", 5: x.Add "six", 6: x.Add "seven", 7 x.Add "eight", 8: x.Add "nine", 9: x.Add "ten", 10: x.Add "eleven", 11 x.Add "twelve", 12: x.Add "thirteen", 13: x.Add "fourteen", 14 x.Add "fifteen", 15: x.Add "sixteen", 16: x.Add "seventeen", 17 x.Add "eighteen", 18: x.Add "nineteen", 19: x.Add "twenty", 20 x.Add "thirty", 30: x.Add "forty", 40: x.Add "fifty", 50 x.Add "sixty", 60: x.Add "seventy", 70: x.Add "eighty", 80 x.Add "ninety", 90: x.Add "hundred", 100: x.Add "thousand", 1000 x.Add "million", 1000000: x.Add "billion", 1000000000 Dim dollarPart As String, centPart As String Dim dollarValue As Double, centValue As Double ' Split into dollars and cents If InStr(Txt, "dollar") > 0 Then dollarPart = Trim(Split(Txt, "dollar")(0)) End If If InStr(Txt, "cent") > 0 Then centPart = Trim(Split(Txt, "cent")(0)) If InStr(centPart, "dollar") > 0 Then centPart = Trim(Split(centPart, "dollar")(1)) End If End If dollarValue = ParseWordsToNumber(dollarPart, x) centValue = ParseWordsToNumber(centPart, x) WordsToNumber = dollarValue + centValue / 100 End Function Private Function ParseWordsToNumber(ByVal Txt As String, x As Object) As Double Dim parts() As String: parts = Split(Txt, " ") Dim total As Double, current As Double Dim i As Long, val As Double For i = 0 To UBound(parts) If x.exists(parts(i)) Then val = x(parts(i)) Select Case val Case 100 If current = 0 Then current = 1 current = current * val Case Is >= 1000 If current = 0 Then current = 1 total = total + current * val current = 0 Case Else current = current + val End Select End If Next i total = total + current ParseWordsToNumber = total End Function
Step 2: Apply the function in your sheet
- Press "Alt" + "Q" to return to Excel.
- In any empty cell, enter this formula and press "Enter". Drag the "Fill Handle" down to get the rest of the results. =WordsToNumber(A2)
Conclusion
Converting numbers to words—or words back to numbers—is not something Excel offers natively, but this guide has shown that there are multiple practical solutions depending on your needs:
- Microsoft 365 users can take advantage of modern built-in functions like TRANSLATE to convert currency numbers to English words with formulas, especially for currencies that follow a "main + subunit" structure.
- VBA user-defined functions offer greater flexibility for both converting numbers to words and reversing currency words back to numeric values. However, they come with macro-related security concerns and are best suited for users familiar with coding.
- Kutools for Excel delivers the easiest, most multilingual, and feature-rich option—requiring no formulas or coding, and covering dozens of currencies and languages.
- If you need to reverse words back into numbers, the VBA solution fills this gap effectively, though it may require cleanup (e.g., removing commas) for accurate results.
Whether you're preparing financial documents, automating check printing, or simply enhancing data presentation, choosing the right method helps you achieve professional and accurate outputs.
Best Office Productivity Tools
Supercharge Your Excel Skills with Kutools for Excel, and Experience Efficiency Like Never Before. Kutools for Excel Offers Over 300 Advanced Features to Boost Productivity and Save Time. Click Here to Get The Feature You Need The Most...
Office Tab Brings Tabbed interface to Office, and Make Your Work Much Easier
- Enable tabbed editing and reading in Word, Excel, PowerPoint, Publisher, Access, Visio and Project.
- Open and create multiple documents in new tabs of the same window, rather than in new windows.
- Increases your productivity by 50%, and reduces hundreds of mouse clicks for you every day!