从文本字符串提取可变长度数字:FILTERXML拆分后取指定值的最优方案
最优解决方案
适用Excel 365/2021及以上版本(性能最优)
直接使用原生文本切割函数定向提取目标值,无需构造XML结构,也不会生成多余的拆分结果:
- 提取第1个数值:
=--TEXTBEFORE(B14,"-") - 提取第2个数值:
=--TEXTAFTER(TEXTBEFORE(B14,"-",2),"-") - 提取第n个数值(n≥1):
=--INDEX(TEXTSPLIT(B14,"-"),n)
公式中的--用于将文本格式的数字转换为数值格式,无需转换可直接删除。
该方案无需触发XML解析逻辑,也不会生成完整的拆分数组,完全按需计算,执行效率远高于FILTERXML方案。
兼容旧版本Excel
如果必须使用FILTERXML实现,首先需要纠正一个认知误区:指定索引的xpath参数//segment[n]并不会先返回全部节点再筛选,FILTERXML会在XML解析阶段直接定位到对应位置的节点返回,本质没有多余计算开销。如果希望公式更易维护,也可以用INDEX包裹原全量拆分公式取指定位置:=INDEX(FILTERXML("<data><segment>"&SUBSTITUTE(B14,"-","</segment><segment>")&"</segment></data>","//segment"),n)
将公式中的n替换为目标位置序号即可,和修改xpath参数的性能差异可以忽略。
内容的提问来源于stack exchange,提问作者Statto
相关产品推荐
相关产品推荐

