Excel宏:如何从含其他数字的文本中剔除货币金额?
在Excel中剔除单元格内的价格金额并保留换行格式
针对你遇到的问题——要剔除单元格内带$或.的价格、保留其他数字和换行格式,下面提供两种可行方案:
方案一:VBA自定义函数(推荐,适配复杂格式)
如果你的Excel允许启用宏,用正则表达式处理是最灵活的方式,能覆盖各种货币格式(带$、逗号、小数点的金额),同时保留原换行结构。
步骤:
- 按
Alt+F11打开VBA编辑器; - 右键点击当前工作簿,选择「插入」→「模块」;
- 将以下代码粘贴到模块窗口:
Function RemovePrices(ByVal cellText As String) As String Dim regex As Object Set regex = CreateObject("VBScript.RegExp") regex.Global = True ' 匹配所有带$或小数点的金额格式,包括带千分位逗号的情况 regex.Pattern = "\s?(\$?[\d,]+\.\d+|\$?\d+)\b" ' 替换匹配到的价格为空 RemovePrices = regex.Replace(cellText, "") ' 清理替换后可能出现的多余空格 RemovePrices = Replace(RemovePrices, " ", " ") ' 保留原换行,同时去除首尾多余空格 RemovePrices = Trim(RemovePrices) End Function
- 返回Excel,在目标单元格输入公式
=RemovePrices(A1)(A1为原内容所在单元格),按回车即可得到处理后的结果,下拉可批量应用。
方案二:内置函数组合(无宏,需Excel 365支持)
如果无法启用宏,可借助TEXTSPLIT、TEXTJOIN等365专属函数拆分每行处理后再合并,保留换行:
在目标单元格输入以下公式:
=TEXTJOIN(CHAR(10), TRUE, TRIM(SUBSTITUTE(TEXTSPLIT(A1, CHAR(10)), MID(TEXTSPLIT(A1, CHAR(10)), IFERROR(FIND("$", TEXTSPLIT(A1, CHAR(10))), IFERROR(FIND(".", TEXTSPLIT(A1, CHAR(10))), LEN(TEXTSPLIT(A1, CHAR(10)))+1) ), LEN(TEXTSPLIT(A1, CHAR(10))) ), "") ))
逻辑说明:
- 用
TEXTSPLIT(A1, CHAR(10))按换行拆分单元格内容为每行独立文本; - 用
FIND定位每行中$或.的位置,找不到则取行尾; - 用
SUBSTITUTE去掉从定位位置到行尾的内容,TRIM清理多余空格; - 最后用
TEXTJOIN(CHAR(10), TRUE, ...)将处理后的行按换行合并。
示例效果:
原单元格内容:
90,000 Mile Intake Service $159.95 Air Filter 69.95 Rear Brake Pads (4MM)
处理后结果:
90,000 Mile Intake Service Air Filter Rear Brake Pads (4MM)
内容的提问来源于stack exchange,提问作者ExcelNoob
相关产品推荐
相关产品推荐

