可使用SUBSTITUTE与TEXTJOIN组合、数组公式或VBA自定义函数提取混合文本中的数字:一、TEXTJOIN+MID提取全部数字;二、LOOKUP+MID提取首个连续数字串;三、VBA函数遍历拼接所有数字字符。

如果Excel单元格中混合了文字和数字,需要将其中的数字单独提取出来,则可能是由于文本格式导致常规方法无法直接识别数值。以下是实现该目标的多种公式方法:
一、使用SUBSTITUTE与TEXTJOIN组合提取所有数字
该方法通过逐个替换非数字字符为空,再用TEXTJOIN连接剩余数字字符,适用于Excel 365或Excel 2019及以上版本。其核心是将文本拆解为单字符,判断是否为数字后保留。
1、在目标单元格输入以下公式:=TEXTJOIN("",TRUE,IF(ISNUMBER(--MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)),MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),""))
2、按Ctrl+Shift+Enter(旧版Excel)或直接按Enter(新版支持动态数组)确认公式。
3、若A1内容为“abc123def45”,则结果返回“12345”。
二、使用数组公式配合SUMPRODUCT提取首个连续数字串
该方法适用于仅需提取文本开头或中间第一个连续数字序列的场景,不依赖高版本函数,兼容Excel 2007及以上。
1、输入以下公式:=LOOKUP(9E+307,--("0"&MID(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789")),ROW(INDIRECT("1:"&LEN(A1))))))
2、按Ctrl+Shift+Enter完成数组公式录入。
3、若A1为“订单号:XZ20240512-001”,则返回“20240512”。
三、借助VBA自定义函数提取全部数字
当公式复杂度高或需频繁调用时,可创建自定义函数。该函数遍历每个字符,拼接所有数字字符并返回纯数字字符串。
1、按Alt+F11打开VBA编辑器。
2、插入新模块,在代码窗口中粘贴以下代码:Function ExtractNumbers(r As Range) As String Dim s As String, c As String, i As Long s = r.Value For i = 1 To Len(s) c = Mid(s, i, 1) If c >= "0" And c
3、关闭编辑器,返回工作表,在任意单元格输入=ExtractNumbers(A1)即可调用。
四、使用Power Query从文本列批量提取数字
适用于大量数据清洗场景,无需编写公式,通过图形界面操作即可生成可刷新的数字提取流程。
1、选中数据列,点击数据 → 从表格/区域,勾选“表包含标题”,确定加载至Power Query编辑器。
2、右键该列 → 转换 → 提取 → 数字 → 选择“仅提取数字”。
3、点击主页 → 关闭并上载,结果将自动写入新工作表。










