You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Excel中不用VBA/RegExp编写公式提取单元格内连续n位数字

Excel提取单元格内连续n位数字公式方案

前提说明

  • 待处理文本存放位置:A1
  • 可灵活调整的提取位数参数存放位置:B1
  • 所有方案均不使用VBA、正则,修改B1的数值即可自动调整提取的数字长度,无需修改公式结构

Excel 365/2021及以上版本方案

提取首次出现的连续n位数字

公式:

=LET(
len_total, LEN(A1),
pos_list, SEQUENCE(len_total - B1 + 1),
check_result, ISNUMBER(--MID(A1, pos_list, B1)),
first_match_pos, XMATCH(TRUE, check_result),
IFERROR(MID(A1, first_match_pos, B1), "无匹配结果")
)

提取所有符合条件的连续n位数字(自动溢出显示)

公式:

=FILTER(MID(A1, SEQUENCE(LEN(A1)-B1+1), B1), ISNUMBER(--MID(A1, SEQUENCE(LEN(A1)-B1+1), B1)), "无匹配结果")

如果需要把所有结果合并为顿号分隔的文本,使用:

=TEXTJOIN("、", TRUE, FILTER(MID(A1, SEQUENCE(LEN(A1)-B1+1), B1), ISNUMBER(--MID(A1, SEQUENCE(LEN(A1)-B1+1), B1)), "无匹配结果"))

Excel 2019及更早版本方案(仅支持提取首次匹配结果)

公式:

=IFERROR(MID(A1,AGGREGATE(15,6,ROW(INDIRECT("1:"&LEN(A1)-B1+1))/ISNUMBER(--MID(A1,ROW(INDIRECT("1:"&LEN(A1)-B1+1)),B1)),1),B1),"无匹配结果")

注意:旧版Excel输入公式后需要按Ctrl+Shift+Enter组合键触发数组计算才能正常返回结果。

效果验证

以你给出的示例文本为例:

待处理文本:abc1234_123456789012abc_87654321000_abc
提取位数B1=8
首次匹配返回结果为12345678,全匹配返回结果包含12345678、23456789、34567890、45678901、56789012、87654321、76543210、65432100、54321000,与正则\d{8}的匹配逻辑完全一致。

补充说明

如果需要提取超过15位的连续数字(比如18位身份证号),因为Excel数字精度限制,原有判断逻辑会失效,将公式中ISNUMBER(--MID(xxx))替换为以下判断条件即可:

SUMPRODUCT(--ISNUMBER(--MID(MID(A1, pos_list, B1), ROW(INDIRECT("1:"&B1)), 1)))=B1

内容的提问来源于stack exchange,提问作者Atex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:24:03