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

如何从不同长度的Excel字符串中提取特定卡路里数据?

Excel提取D列卡路里数值的实用方案

针对D列字符串长度不一致导致MID函数失效的问题,以下是几种适配不同Excel版本的解决方法:

方法1:使用REGEXEXTRACT(Excel 365及以上版本)

直接通过正则匹配提取“卡路里”前的数字,无需考虑字符串长度,是最简便的方案:

=REGEXEXTRACT(D2,"(\d+)卡路里")
  • 原理:匹配任意长度的数字(\d+)后跟“卡路里”的模式,提取其中的数字部分
  • 使用方式:将公式输入到目标单元格(如E2),下拉填充即可批量提取

方法2:使用TEXTBEFORE+TEXTAFTER(Excel 365/2021及以上版本)

如果卡路里数值前有固定关键词(如“消耗”),可通过两次截取精准提取:

=--TEXTAFTER(TEXTBEFORE(D2,"卡路里"),"消耗")
  • 原理:先用TEXTBEFORE截取“卡路里”前的所有内容,再用TEXTAFTER截取“消耗”后的部分,--将文本转为数值
  • 适配场景:D列内容格式统一包含固定触发词(如“消耗XX卡路里”)

方法3:使用FILTERXML(兼容Excel 2013及以上版本)

适合没有正则功能的旧版Excel,通过XML解析提取数值:

=INDEX(FILTERXML("<t><s>"&SUBSTITUTE(D2," ","</s><s>")&"</s></t>","//s[number(.)=.]"),COUNTA(FILTERXML("<t><s>"&SUBSTITUTE(D2," ","</s><s>")&"</s></t>","//s[number(.)=.]")))
  • 原理:将字符串按空格拆分XML节点,筛选出所有数值节点,取最后一个(通常对应卡路里数值)
  • 使用方式:旧版Excel需按Ctrl+Shift+Enter作为数组公式输入,新版直接回车即可

方法4:传统组合函数(兼容所有Excel版本)

通过SEARCH、MID和数组判断实现,无需依赖新函数:

=--MID(D2,MAX(IF(ISNUMBER(--MID(D2,ROW($1:$100),1)),ROW($1:$100),0))-LEN(TEXT(--MID(D2,MAX(IF(ISNUMBER(--MID(D2,ROW($1:$100),1)),ROW($1:$100),0)),LEN(D2)-MAX(IF(ISNUMBER(--MID(D2,ROW($1:$100),1)),ROW($1:$100),0))+1,"#"))+1,LEN(TEXT(--MID(D2,MAX(IF(ISNUMBER(--MID(D2,ROW($1:$100),1)),ROW($1:$100),0)),LEN(D2)-MAX(IF(ISNUMBER(--MID(D2,ROW($1:$100),1)),ROW($1:$100),0))+1,"#")))
  • 原理:遍历字符串找到最后一段连续数字的起始和结束位置,用MID截取后转为数值
  • 使用方式:必须按Ctrl+Shift+Enter作为数组公式输入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:10:17