Skip to main content

Convert numbers into words in Excel – A comprehensive guide

Author: Xiaoyang Last Modified: 2025-06-12

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.

A screenshot showing converting numbers to words in Excel

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.

  1. Select a blank cell (e.g. B2), enter the formula below.
    =PROPER(SUBSTITUTE(SUBSTITUTE(LOWER(TRANSLATE(BAHTTEXT(B9),"th","en")),"baht","dollars"),"satang","cents"))
  2. Press "Enter" and drag the "Fill Handle" down to apply it to other rows.
    A screenshot showing how to use the new function to convert numbers to words

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:

CurrencyMajor Unit ReplacementMinor Unit ReplacementExample 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

  1. Open the worksheet where you want to use this feature.
  2. Press "Alt" + "F11" to open the "Microsoft Visual Basic for Applications" window.
  3. 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
    A screenshot showing the code editor
  4. Press "Alt" + "Q" to return to the worksheet.

Step 2: Apply the function

  1. In a cell, enter the formula below and press "Enter".
    =SpellNumberToEnglish(A2)
  2. Then drag the fill handle to apply it to other rows as needed. Your numbers will now be spelled out in words like:
    A screenshot showing the user-defined function and the results

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.

A screenshot showing how to change the codes to adapt for other currencies

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:

  1. Press "Ctrl" + "S" to save.
  2. 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".
    A screenshot showing how to change the codes to adapt for other currencies
  3. In the "Save As" window.
    1. Choose a save location.
    2. Select "Excel Macro-Enabled Workbook (*.xlsm)" in the "Save as type" drop-down list.
    3. Click "Save".
      A screenshot showing how to change the codes to adapt for other currencies

Limitations of the SpellNumberToEnglish VBA Function

No support for multiple languages
  • 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).
Not saved in standard Excel files
  • 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.
Macro security warning when shared
  • 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.
Requires VBA knowledge for customization
  • 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:

  1. Select the cells that contain the numbers you want to convert.
  2. Select "Kutools" > "Content" > "Numbers to Words".
  3. In the "Numbers to Currency Word" dialog box, you need to:
    1. Choose the language and currency style you prefer (e.g. English – United States for USD)
    2. Click "OK".
      A screenshot showing the numbers to currency word dialog box

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:

"One hundred twenty-three dollars and forty-five cents"

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

  1. Open your Excel workbook.
  2. Press "Alt" + "F11" to open the "Microsoft Visual Basic for Applications (VBA)" editor.
  3. In the VBA editor, click "Insert" > "Module".
  4. 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

  1. Press "Alt" + "Q" to return to Excel.
  2. In any empty cell, enter this formula and press "Enter". Drag the "Fill Handle" down to get the rest of the results.
    =WordsToNumber(A2)
    A screenshot showing how to convert words to numbers

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

🤖 Kutools AI Aide: Revolutionize data analysis based on: Intelligent Execution   |  Generate Code  |  Create Custom Formulas  |  Analyze Data and Generate Charts  |  Invoke Kutools Functions
Popular Features: Find, Highlight or Identify Duplicates   |  Delete Blank Rows   |  Combine Columns or Cells without Losing Data   |   Round without Formula ...
Super Lookup: Multiple Criteria VLookup    Multiple Value VLookup  |   VLookup Across Multiple Sheets   |   Fuzzy Lookup ....
Advanced Drop-down List: Quickly Create Drop Down List   |  Dependent Drop Down List   |  Multi-select Drop Down List ....
Column Manager: Add a Specific Number of Columns  |  Move Columns  |  Toggle Visibility Status of Hidden Columns  |  Compare Ranges & Columns ...
Featured Features: Grid Focus   |  Design View   |   Big Formula Bar    Workbook & Sheet Manager   |  Resource Library (Auto Text)   |  Date Picker   |  Combine Worksheets   |  Encrypt/Decrypt Cells    Send Emails by List   |  Super Filter   |   Special Filter (filter bold/italic/strikethrough...) ...
Top 15 Toolsets12 Text Tools (Add Text, Remove Characters, ...)   |   50+ Chart Types (Gantt Chart, ...)   |   40+ Practical Formulas (Calculate age based on birthday, ...)   |   19 Insertion Tools (Insert QR Code, Insert Picture from Path, ...)   |   12 Conversion Tools (Numbers to Words, Currency Conversion, ...)   |   7 Merge & Split Tools (Advanced Combine Rows, Split Cells, ...)   |   ... and more
Use Kutools in your preferred language – supports English, Spanish, German, French, Chinese, and 40+ others!

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!