首页 > 解决方案 > 寻求更有效的公式从分隔文本字符串中提取字段

问题描述

我正在使用以下长公式从分隔字符串中提取特定字段。该公式工作正常,但有没有更有效的方法,注意它必须支持具有 100 个分隔字段的非常大的字符串?

=IFERROR(MID($A1,FIND("®",SUBSTITUTE(A1,char(187),B1))+1,FIND("®",SUBSTITUTE(A1,CHAR(187),"®",B1+1))-(FIND("®",SUBSTITUTE(A1,CHAR(187),"®",B1))+1)),"")

A1包含字符串;
char(187)是分隔符;
B1包含我要提取的字段的编号

任何帮助将不胜感激

a1 = »44130»是»44105»»为端到端医疗评估流程设计和实施工作流系统,以改善客户体验、数据准确性和运营效率»

B1 = 3

答案 = 44105(作为文本)

字符串中的数据可能包括任何能够在标准键盘上键入的内容 “®”已在替代公式中选择,因为它不是标准字符

Windows Excel 2016(但希望它尽可能广泛兼容)

标签: excelstringdelimited

解决方案


  • 如果您有 Windows Excel 2010+ 或 Office 365,
  • 如果你的字符串,加上替换,将少于 32,768 个字符,
  • 如果"char(187) is the delimiter" 完全定义了字符串的相关特征,
  • 然后你就可以使用这个FILTERXML功能了。

例如:

=FILTERXML("<t><s>" & SUBSTITUTE($A1,CHAR(187),"</s><s>") & "</s></t>","//s[" & $B1 &"]")

但是,如果有数值,这可能会删除前导零。

这是否比您的公式更有效可能取决于您对有效的定义

编辑请注意,如果您的字符串恰好包含保留字符,即HTML 实体,您将需要替换它们(使用SUBSTITUTE带有实体名称的嵌套 s。(它们将作为输出字符串中的正确字符出现)。如果链接没有t 工作,搜索该术语。

一个常见的实体可能是 & 号&

为了解决这个问题,您可以使用以下公式:

=FILTERXML("<t><s>" & SUBSTITUTE(SUBSTITUTE($A1,"&","&amp;"),CHAR(187),"</s><s>") & "</s></t>","//s["&B1&"]")

另请注意,空节点将返回#Value!错误。


推荐阅读