跳至主要内容

在Excel中将数字转换为英文单词——全面指南

Author: Xiaoyang Last Modified: 2025-07-31

在财务报告、法律文件、发票或支票中,常常需要将数字转换为英文书写形式。虽然Excel本身并不直接提供这种功能,但有几种可靠的方法可以实现,从内置的Microsoft 365函数到VBA用户自定义函数以及强大的第三方插件。本全面指南将引导您了解每种方法,突出它们的优点和局限性,并帮助您根据具体需求选择最佳方案。

A screenshot showing converting numbers to words in Excel

在Excel中将数字转换为单词的方法

本节介绍了在Excel中将货币数字转换为单词的三种有效方法。选择最适合您的Excel版本和使用场景的方法。


方法1:使用新的内置函数(仅限Microsoft 365)

如果您使用的是Microsoft 365版的Excel,可以利用新的TRANSLATE函数,结合创意公式组合轻松将货币数字转换为单词。

如下图所示,要将范围A2:A5中的货币数字转换为单词,您可以应用以下公式完成操作。

  1. 选择一个空白单元格(例如B2),输入以下公式。
    =PROPER(SUBSTITUTE(SUBSTITUTE(LOWER(TRANSLATE(BAHTTEXT(B9),"th","en")),"baht","dollars"),"satang","cents"))
  2. 按“Enter”键并向下拖动“填充柄”以将其应用于其他行。
    A screenshot showing how to use the new function to convert numbers to words

公式的工作原理:

  • BAHTTEXT: 将数字转换为泰铢文本(例如,“หนึ่งบาทถ้วน”)。
  • TRANSLATE(...,"th","en"): 将文本从一种语言翻译成另一种语言(需要Microsoft 365)。在这种情况下,它将泰语翻译成英语。
  • LOWER(): 将整个字符串转换为小写以保持一致性。
  • SUBSTITUTE(): 替换货币词汇,如“baht”和“satang”,为您所需的术语。
  • PROPER(): 将每个单词的首字母大写以进行适当的格式化。

适应其他货币:

上述公式输出美元。您可以通过替换主要和次要单位来自定义其他货币:

  • 将“dollars”替换为目标货币的主要单位,例如英镑的“pounds”。
  • 将“cents”替换为次要单位,例如英镑的“pence”。

下表列出了兼容货币及其对应的公式:

货币主要单位替换次要单位替换示例公式(假设值在单元格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"))

此方法的局限性:

  • 仅适用于Microsoft 365版Excel(由于TRANSLATE()函数)。
  • 输出高度依赖于BAHTTEXT()格式化的准确性。
  • 该方法适用于像泰铢这样既有主要单位又有次要单位的货币(例如,美元和美分)。不建议用于不遵循类似货币结构的货币。

方法2:使用VBA用户自定义函数

在本节中,您将学习如何使用基于VBA的用户自定义函数(UDF)将数值转换为英文货币单词——默认情况下专门针对美元(USD)。

步骤1:插入VBA代码

  1. 打开您希望使用此功能的工作表。
  2. 按“Alt”+“F11”打开“Microsoft Visual Basic for Applications”窗口。
  3. 在编辑器中,点击“插入”>“模块”,并粘贴以下VBA代码。
    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. 按“Alt”+“Q”返回工作表。

步骤2:应用函数

  1. 在单元格中,输入以下公式并按“Enter”。
    =SpellNumberToEnglish(A2)
  2. 然后拖动填充柄以将其应用于其他行。现在,您的数字将以单词形式拼写出来,例如:
    A screenshot showing the user-defined function and the results

适应其他货币:

该函数输出的值为“Dollar(s)”和“Cent(s)”,这些是硬编码的,仅适用于美元。如果您想将数字转换为其他货币,例如“英镑”,则需要手动更改以下代码行中的主要和次要单位。

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

将工作簿保存为启用宏的文件

默认情况下,除非将工作簿保存为启用宏的工作簿,否则VBA函数不会被保留:

  1. 按“Ctrl”+“S”保存。
  2. 并在弹出的关于宏的消息中选择“返回”。
    注意:如果弹出窗口仅显示“是”、“否”和“帮助”,请单击“否”。
    A screenshot showing how to change the codes to adapt for other currencies
  3. 在“另存为”窗口中。
    1. 选择保存位置。
    2. 在“保存类型”下拉列表中选择“启用宏的Excel工作簿 (*.xlsm)”。
    3. 点击“保存”。
      A screenshot showing how to change the codes to adapt for other currencies

SpellNumberToEnglish VBA函数的局限性

不支持多种语言
  • 此函数仅生成英文结果。
  • 它不支持其他语言(例如法语、德语),也不处理货币单位在数字前的货币结构(例如,印度英语中的“卢比一百”)。
未保存在标准Excel文件中
  • 如果您没有将工作簿保存为启用宏的工作簿(.xlsm),当关闭Excel时,该函数将会丢失。
  • 如果保存为普通的.xlsx文件,所有VBA代码将被删除。
共享时出现宏安全警告
  • 将启用宏的文件发送给他人时,打开时会触发“安全警告 – 宏已被禁用”提示。
  • 一些用户可能会犹豫是否启用宏,担心潜在的安全风险,并可能选择不使用该文件。
需要VBA知识进行自定义
  • 对货币术语或格式的任何更改都需要手动编辑VBA代码。
  • 对于不熟悉宏或脚本的用户来说,这不是理想的选择。

方法3:使用Kutools for Excel(无需公式或VBA)

如果安装了“Kutools for Excel”,可以使用其“数字转文字”功能将数字转换为英文(货币或纯文本),以及其他数十种语言和货币,如欧元、英镑、日元等。

如果您正在寻找一种无代码、用户友好且多功能的解决方案来在Excel中将数字转换为文字,Kutools for Excel提供了一个专用的“数字转文字”功能,支持:

  • 英文(美元、英镑、欧元等)
  • 数十种其他语言和货币(例如日元、印度卢比、人民币)
  • 货币格式或纯文字(例如,“一百二十三”而不是“一百二十三美元”)

使用步骤:

  1. 选择包含要转换数字的单元格。
  2. 选择“Kutools”>“文本”>“数字转文字”。
  3. 在“数字转货币单词”对话框中,您需要:
    1. 选择您喜欢的语言和货币样式(例如,英文 – 美国代表美元)
    2. 点击“确定”。
      A screenshot showing the numbers to currency word dialog box

可选:勾选“不转换为货币”如果您想要纯英文单词(没有“美元”或“美分”)。

根据您的设置,所选数字现在将被转换为相应的货币单词。

Kutools for Excel - 通过超过300个必备工具,让Excel功能大幅提升。永久免费享受AI功能!立即获取


反向操作:将货币单词转换为数字

如果您有一系列用英文单词书写的货币金额,例如:

“一百二十三美元四十五美分”

并且您想将它们转换为Excel中的实际数字(例如,123.45),可以使用自定义VBA用户自定义函数(UDF)如下。

步骤1:打开VBA编辑器并插入VBA代码

  1. 打开您的Excel工作簿。
  2. 按“Alt”+“F11”打开“Microsoft Visual Basic for Applications (VBA)”编辑器。
  3. 在VBA编辑器中,点击“插入”>“模块”。
  4. 复制并将以下VBA代码粘贴到空白模块窗口中:
    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

步骤2:在表格中应用函数

  1. 按“Alt”+“Q”返回Excel。
  2. 在任何空白单元格中,输入此公式并按“Enter”。向下拖动“填充柄”以获取其余结果。
    =WordsToNumber(A2)
    A screenshot showing how to convert words to numbers

结论

将数字转换为单词或单词转换回数字并不是Excel原生提供的功能,但本指南表明,根据您的需求,存在多种实用的解决方案:

  • Microsoft 365用户可以利用现代内置函数(如TRANSLATE)通过公式将货币数字转换为英文单词,特别是对于遵循“主单位+辅单位”结构的货币。
  • VBA用户自定义函数为将数字转换为单词以及将货币单词转换回数值提供了更大的灵活性。然而,它们伴随着与宏相关的安全问题,最适合熟悉编码的用户。
  • Kutools for Excel提供了最简单、多语言、功能丰富的选项——无需公式或编码,涵盖数十种货币和语言。
  • 如果您需要将单词转换回数字,VBA解决方案有效地填补了这一空白,尽管为了获得准确的结果,可能需要清理(例如,去除逗号)。

无论您是在准备财务文件、自动化支票打印还是仅仅增强数据呈现效果,选择正确的方法能够帮助您实现专业且准确的输出。


最佳 Office 办公效率工具

🤖 Kutools AI 助手:基于智能执行,彻底革新数据分析 生成代码创建自定义公式分析数据并生成图表调用 Kutools Functions
热门功能:查找、选中项的背景色或标记重复项|删除空行|合并列或单元格且不丢失数据|四舍五入(无公式)...
高级 LOOKUP多条件查找 (VLookup)多值查找 (VLookup)多表查找 (VLookup Across Multiple Sheets)模糊查找 (Fuzzy Lookup)...
高级下拉列表快速创建下拉列表依赖型下拉列表多选下拉列表...
列管理器添加指定数量的列移动列切换隐藏列的可见状态比较区域及列...
特色功能网格聚焦设计视图增强编辑栏工作簿 & 工作表管理器资源库(自动文本)|日期提取合并数据加密/解密单元格按列表发送电子邮件超级筛选特殊筛选(筛选粗体/倾斜/删除线等)...
热门15 大工具集12 款文本工具添加文本删除特定字符等)50+ 种图表 类型甘特图等)40+ 实用公式基于生日计算年龄等)19 款插入工具插入二维码按路径插入图片等)12 种转换工具小写金额转大写汇率转换等)7 款合并与分割工具高级合并行分割单元格等)...更多精彩等你发现
使用 Kutools,支持您的首选语言——包括英语、西班牙语、德语、法语、中文及40 多种其他语言!

用 Kutools for Excel 加速你的 Excel 技能,体验前所未有的高效办公。 Kutools for Excel 提供300 多项高级功能,助您提升效率,节省大量时间。点击此处,获取你最需要的功能...


Office Tab 为 Office 带来标签式界面,让你的工作更加轻松

  • 在 Word、Excel、PowerPoint 启用标签式编辑和阅读
  • 在同一窗口的新标签中打开和创建多个文档,无需新建窗口。
  • 办公效率提升50%,每天帮你减少上百次鼠标点击!