Excel如何提取单元格文本中间的多个数值并拆分至对应列
解法
Excel 365 公式解法(最简单)
假设你的原始数据存放在A列,表头在A1,从A2开始是第一条数据:
- From列(B2单元格)输入公式:
=IFERROR(INDEX(FILTER(--TEXTSPLIT(A2," "),ISNUMBER(--TEXTSPLIT(A2," ")),""),1),"") - To列(C2单元格)输入公式:
=IFERROR(INDEX(FILTER(--TEXTSPLIT(A2," "),ISNUMBER(--TEXTSPLIT(A2," ")),""),2),"")
输入完成后下拉填充公式即可。原理是先把文本按空格拆分为独立片段,筛选出所有可转换为数值的片段,按顺序取第一个放From、第二个放To,没有对应位置的数值则返回空值。
全版本Excel通用解法(VBA自定义函数)
如果用的是没有TEXTSPLIT函数的低版本Excel,可以用自定义函数实现:
- 按下
Alt+F11打开VBA编辑器,右键点击左侧工作簿名称 → 「插入」→ 「模块」 - 粘贴以下代码:
Function ExtractNum(rng As Range, position As Integer) Dim regEx As Object Set regEx = CreateObject("VBScript.RegExp") regEx.Global = True '匹配整数、带小数点的数值 regEx.Pattern = "\d+\.?\d*" Dim matches As Object Set matches = regEx.Execute(rng.Value) If matches.Count >= position Then ExtractNum = matches(position - 1) Else ExtractNum = "" End If End Function
- 保存文件为「Excel 启用宏的工作簿(*.xlsm)」格式
- 回到工作表,B2(From列)输入
=ExtractNum(A2,1),C2(To列)输入=ExtractNum(A2,2),下拉填充即可。
Power Query解法(无代码、适合批量处理)
如果不想用公式或者宏,用Power Query操作也可以:
- 选中原始数据区域,点击「数据」选项卡 → 「从表格/区域」导入Power Query编辑器
- 选中Name列,点击「转换」选项卡 → 「拆分列」→ 「按分隔符」,分隔符选空格,拆分到「行」
- 选中拆分后的列,点击「转换」选项卡 → 「数据类型」→ 「数字」,报错的行直接筛选删除
- 点击「添加列」选项卡 → 「索引列」→ 从1开始,按分组(Name列)生成序号
- 点击「转换」选项卡 → 「透视列」,值列选拆分后的数值列,聚合值选「不要聚合」
- 重命名列为From、To,最后导出数据到工作表即可。
内容的提问来源于stack exchange,提问作者Kuro
相关产品推荐
相关产品推荐

