使用“快速填充”(Ctrl + E) 最简单,无需公式
适用于 Excel 2013 及以上版本。
步骤:
- 假设数据在 A 列(如
A1: "ABC123DEF")。 - 在 B1 单元格手动输入你想提取的数字:
123。 - 点击 B2 单元格,按快捷键
Ctrl + E。 - Excel 会自动识别模式并填充剩余单元格。
✅ 优点:速度快,无需公式。
❌ 缺点:如果数据模式不统一,可能出错,需检查。
使用函数提取(适合动态更新)
情况 1:数字在字符串末尾(如 "ABC123" → 123)
使用 RIGHT + LEN + SUBSTITUTE 组合:
=RIGHT(A1, LEN(A1) - LEN(SUBSTITUTE(A1, 0, "")) - LEN(SUBSTITUTE(A1, 1, "")) - LEN(SUBSTITUTE(A1, 2, "")) - LEN(SUBSTITUTE(A1, 3, "")) - LEN(SUBSTITUTE(A1, 4, "")) - LEN(SUBSTITUTE(A1, 5, "")) - LEN(SUBSTITUTE(A1, 6, "")) - LEN(SUBSTITUTE(A1, 7, "")) - LEN(SUBSTITUTE(A1, 8, "")) - LEN(SUBSTITUTE(A1, 9, "")))
💡 更简洁写法(Excel 365 / 2021):
=TEXTAFTER(A1, TEXTJOIN("", TRUE, TEXT(SEQUENCE(10)-1, "0")))或使用 VBA 自定义函数(见下文)。
情况 2:数字在字符串开头(如 "123ABC" → 123)
=LEFT(A1, LEN(A1) - LEN(SUBSTITUTE(A1, 0, "")) - LEN(SUBSTITUTE(A1, 1, "")) - ... - LEN(SUBSTITUTE(A1, 9, "")))
情况 3:提取所有数字(无论位置,如 "A1B2C3" → 123)
Excel 没有内置纯函数直接提取中间数字,但可以使用以下技巧:
✅ 推荐:使用 TEXTJOIN + MID + ISNUMBER(Excel 365)
=TEXTJOIN("", TRUE, IFERROR(--MID(A1, SEQUENCE(LEN(A1)), 1), ""))
解释:逐字符检查是否为数字,如果是则保留,最后拼接。
✅ 更兼容写法(Excel 2019 及以下):
使用辅助列或 VBA。
使用 VBA 自定义函数(最灵活)
按 Alt + F11 打开 VBA 编辑器,插入模块,粘贴以下代码:
Function ExtractNumbers(ByVal str As String) As String
Dim i As Integer
Dim result As String
For i = 1 To Len(str)
If IsNumeric(Mid(str, i, 1)) Then
result = result & Mid(str, i, 1)
End If
Next i
ExtractNumbers = result
End Function
使用方法:
在单元格中输入:
=ExtractNumbers(A1)
✅ 优点:适用于任何位置、任意混合字符串,可提取所有数字。
❌ 缺点:需要启用宏,保存为.xlsm格式。
使用“分列”功能(仅适用于固定格式)
如果数据格式统一(如 "ABC-123"),可使用:
- 选中列 → 数据 → 分列 → 分隔符号 → 勾选其他(如 )→ 完成。
- 然后删除非数字列。
总结建议
| 场景 | 推荐方法 |
|---|---|
| 快速一次性提取 | Ctrl + E(快速填充) |
| 动态更新 + 数字在末尾 | RIGHT + SUBSTITUTE 组合 |
| 动态更新 + 数字在开头 | LEFT + SUBSTITUTE 组合 |
| 提取任意位置所有数字 | VBA 自定义函数 或 Excel 365 TEXTJOIN + MID |
| 格式统一(如带分隔符) | 分列 功能 |
如需进一步帮助,请提供你的数据样例(如 A1: "ID-12345-ABC"),我可以给出具体公式。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/479096.html



