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

在Excel中将数字转换为单词的方法
本节介绍了在Excel中将货币数字转换为单词的三种有效方法。选择最适合您的Excel版本和使用场景的方法。
方法1:使用新的内置函数(仅限Microsoft 365)
如果您使用的是Microsoft 365版的Excel,可以利用新的TRANSLATE函数,结合创意公式组合轻松将货币数字转换为单词。
如下图所示,要将范围A2:A5中的货币数字转换为单词,您可以应用以下公式完成操作。
- 选择一个空白单元格(例如B2),输入以下公式。 =PROPER(SUBSTITUTE(SUBSTITUTE(LOWER(TRANSLATE(BAHTTEXT(B9),"th","en")),"baht","dollars"),"satang","cents"))
- 按“Enter”键并向下拖动“填充柄”以将其应用于其他行。
公式的工作原理:
- 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代码
- 打开您希望使用此功能的工作表。
- 按“Alt”+“F11”打开“Microsoft Visual Basic for Applications”窗口。
- 在编辑器中,点击“插入”>“模块”,并粘贴以下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
- 按“Alt”+“Q”返回工作表。
步骤2:应用函数
- 在单元格中,输入以下公式并按“Enter”。 =SpellNumberToEnglish(A2)
- 然后拖动填充柄以将其应用于其他行。现在,您的数字将以单词形式拼写出来,例如:
适应其他货币:
该函数输出的值为“Dollar(s)”和“Cent(s)”,这些是硬编码的,仅适用于美元。如果您想将数字转换为其他货币,例如“英镑”,则需要手动更改以下代码行中的主要和次要单位。

将工作簿保存为启用宏的文件
默认情况下,除非将工作簿保存为启用宏的工作簿,否则VBA函数不会被保留:
- 按“Ctrl”+“S”保存。
- 并在弹出的关于宏的消息中选择“返回”。 注意:如果弹出窗口仅显示“是”、“否”和“帮助”,请单击“否”。
- 在“另存为”窗口中。
- 选择保存位置。
- 在“保存类型”下拉列表中选择“启用宏的Excel工作簿 (*.xlsm)”。
- 点击“保存”。
SpellNumberToEnglish VBA函数的局限性
- 此函数仅生成英文结果。
- 它不支持其他语言(例如法语、德语),也不处理货币单位在数字前的货币结构(例如,印度英语中的“卢比一百”)。
- 如果您没有将工作簿保存为启用宏的工作簿(.xlsm),当关闭Excel时,该函数将会丢失。
- 如果保存为普通的.xlsx文件,所有VBA代码将被删除。
- 将启用宏的文件发送给他人时,打开时会触发“安全警告 – 宏已被禁用”提示。
- 一些用户可能会犹豫是否启用宏,担心潜在的安全风险,并可能选择不使用该文件。
- 对货币术语或格式的任何更改都需要手动编辑VBA代码。
- 对于不熟悉宏或脚本的用户来说,这不是理想的选择。
方法3:使用Kutools for Excel(无需公式或VBA)
如果安装了“Kutools for Excel”,可以使用其“数字转文字”功能将数字转换为英文(货币或纯文本),以及其他数十种语言和货币,如欧元、英镑、日元等。
如果您正在寻找一种无代码、用户友好且多功能的解决方案来在Excel中将数字转换为文字,Kutools for Excel提供了一个专用的“数字转文字”功能,支持:
- 英文(美元、英镑、欧元等)
- 数十种其他语言和货币(例如日元、印度卢比、人民币)
- 货币格式或纯文字(例如,“一百二十三”而不是“一百二十三美元”)
使用步骤:
- 选择包含要转换数字的单元格。
- 选择“Kutools”>“文本”>“数字转文字”。
- 在“数字转货币单词”对话框中,您需要:
- 选择您喜欢的语言和货币样式(例如,英文 – 美国代表美元)
- 点击“确定”。
可选:勾选“不转换为货币”如果您想要纯英文单词(没有“美元”或“美分”)。
根据您的设置,所选数字现在将被转换为相应的货币单词。
Kutools for Excel - 通过超过300个必备工具,让Excel功能大幅提升。永久免费享受AI功能!立即获取
反向操作:将货币单词转换为数字
如果您有一系列用英文单词书写的货币金额,例如:
并且您想将它们转换为Excel中的实际数字(例如,123.45),可以使用自定义VBA用户自定义函数(UDF)如下。

步骤1:打开VBA编辑器并插入VBA代码
- 打开您的Excel工作簿。
- 按“Alt”+“F11”打开“Microsoft Visual Basic for Applications (VBA)”编辑器。
- 在VBA编辑器中,点击“插入”>“模块”。
- 复制并将以下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:在表格中应用函数
- 按“Alt”+“Q”返回Excel。
- 在任何空白单元格中,输入此公式并按“Enter”。向下拖动“填充柄”以获取其余结果。 =WordsToNumber(A2)
结论
将数字转换为单词或单词转换回数字并不是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 for Excel 加速你的 Excel 技能,体验前所未有的高效办公。 Kutools for Excel 提供300 多项高级功能,助您提升效率,节省大量时间。点击此处,获取你最需要的功能...
Office Tab 为 Office 带来标签式界面,让你的工作更加轻松
- 在 Word、Excel、PowerPoint 启用标签式编辑和阅读
- 在同一窗口的新标签中打开和创建多个文档,无需新建窗口。
- 办公效率提升50%,每天帮你减少上百次鼠标点击!