# 从文本中提取数字
1、数字在开始处
=-LOOKUP(0,-LEFT(B3,ROW($1:$15)))
[!note]
详细解析
第一步 LEFT(B3,ROW($1:$15) //把b3内容从左向右逐位取字符 生成一个15个元素的数组
第二步 -LEFT(B3,ROW($1:$15) //加负号 把数组中的元素转为数值
第三步 LOOKUP(0,-LEFT(B3,ROW($1:$15))) //1、从数组中取得<=0的最后一个数(注:数组是升序的)2、忽略错误值 LOOKUP(0, ...)里的 0不是要“匹配 0”,而是一个“足够小、但能兜住所有负数”的查找值,用来逼 LOOKUP 返回“最后一个有效数字”。
第四步 LOOKUP(0,-LEFT(B3,ROW($1:$15))) //加负号 还原值
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 个字符,最终把文本逐字拆成纵向数组溢出到下方单元格。第二步 --MID(B7,SEQUENCE(LEN(B7)),1) //两次负号 第一次每项转换为数值 第二次恢复原值
第三步 =LOOKUP(10,--MID(B7,SEQUENCE(LEN(B7)),1),ROW($1:$15)) //--MID把文本逐字拆开并强制转数字(非数字变错误),LOOKUP(10,...)忽略错误找 ≤10 的最后一个有效数字,返回对应的 ROW($1:$15)序号——本质是定位文本中"最后一个数字字符"在字符串里的位置。
第四步 =LEFT(B7,LOOKUP(10,--MID(B7,SEQUENCE(LEN(B7)),1),ROW($1:$15))) //
LEFT从左侧截到最后一个数字字符的位置
第五步 =--RIGHT(LEFT(B7,LOOKUP(10,--MID(B7,SEQUENCE(LEN(B7)),1),ROW($1:$15))),ROW($1:$15)) //从右向左逐位取 生成数组 且转为数值 恢复原值
第六步 =-LOOKUP(0,-RIGHT(LEFT(B7,LOOKUP(10,--MID(B7,SEQUENCE(LEN(B7)),1),ROW($1:$15))),ROW($1:$15))) //通过
LOOKUP取最后一个有效数字并还原负号,最终从文本中提取出"最后一个完整数字段(支持小数)"作为数值返回




第二步 --MID(B7,SEQUENCE(LEN(B7)),1) //两次负号 第一次每项转换为数值 第二次恢复原值





