# 从文本中提取数字

1、数字在开始处

=-LOOKUP(0,-LEFT(B3,ROW($1:$15)))

[!note]

详细解析

第一步 LEFT(B3,ROW($1:$15) //把b3内容从左向右逐位取字符 生成一个15个元素的数组 image-20261014151908292

第二步 -LEFT(B3,ROW($1:$15) //加负号 把数组中的元素转为数值
image-20261014151940454

第三步 LOOKUP(0,-LEFT(B3,ROW($1:$15))) //1、从数组中取得<=0的最后一个数(注:数组是升序的)2、忽略错误值 LOOKUP(0, ...)里的 0不是要“匹配 0”,而是一个“足够小、但能兜住所有负数”的查找值,用来逼 LOOKUP 返回“最后一个有效数字”。 image-20261014152606801

第四步 LOOKUP(0,-LEFT(B3,ROW($1:$15))) //加负号 还原值 image-20261014152649788

2、数字在结尾

=-LOOKUP(0,-RIGHT(B4,ROW($1:$15)))

[!note]

原理同上

3、数字在中间 (通用方法)兼容所有情况

=-LOOKUP(0,-RIGHT(LEFT(B7,LOOKUP(10,--MID(B7,SEQUENCE(LEN(B7)),1),ROW($1:$15))),ROW($1:$15)))

[!note]

解析 第一步 MID(B7,SEQUENCE(LEN(B7)),1) //用 SEQUENCE(LEN(B7))生成 1 到文本长度的序号数组,让 MID从每个位置依次截 1 个字符,最终把文本逐字拆成纵向数组溢出到下方单元格。 image-20261014154649662 第二步 --MID(B7,SEQUENCE(LEN(B7)),1) //两次负号 第一次每项转换为数值 第二次恢复原值 image-20261014155002647

image-20261014155058496

第三步 =LOOKUP(10,--MID(B7,SEQUENCE(LEN(B7)),1),ROW($1:$15)) //--MID把文本逐字拆开并强制转数字(非数字变错误),LOOKUP(10,...)忽略错误找 ≤10 的最后一个有效数字,返回对应的 ROW($1:$15)序号——本质是定位文本中"最后一个数字字符"在字符串里的位置。 image-20261014155322170

第四步 =LEFT(B7,LOOKUP(10,--MID(B7,SEQUENCE(LEN(B7)),1),ROW($1:$15))) // LEFT从左侧截到最后一个数字字符的位置

image-20261014155722396

第五步 =--RIGHT(LEFT(B7,LOOKUP(10,--MID(B7,SEQUENCE(LEN(B7)),1),ROW($1:$15))),ROW($1:$15)) //从右向左逐位取 生成数组 且转为数值 恢复原值 image-20261014160748250

第六步 =-LOOKUP(0,-RIGHT(LEFT(B7,LOOKUP(10,--MID(B7,SEQUENCE(LEN(B7)),1),ROW($1:$15))),ROW($1:$15))) //通过 LOOKUP取最后一个有效数字并还原负号,最终从文本中提取出"最后一个完整数字段(支持小数)"作为数值返回

image-20261014162054254