使用 Excel 公式查找特定字符和 return 单元格中的下一个值

Find specific characters and return the next value in the cell using Excel Formula

我不知道从哪里开始使用公式,因为我对所有事情都感到困惑。我有一个包含“PON”或“PON:”或“PON =”的单元格,然后是实际的 PON(示例:PON 123467)我想在单元格中公式为 return 123467。

Examples                                         What I want returned
I have PON 123467 for shoes                         123467
I have PON: 234567-AB for food                      234567-AB
I have PON - 569874-Weird for accessories           569874-Weird
I have PON = DOG-564-987 for dog food               DOG-564-987

我目前使用的是Excel365

你可以试试这个公式。

=TRIM(LEFT(MID(A2,FIND(@{1,2,3,4,5,6,7,8,9},A2),100),FIND(" ",MID(A2,FIND(@{1,2,3,4,5,6,7,8,9},A2),100))))

它提取第一个数字和该数字后面的第一个 space 之间的文本。该提取物的大小限制为 100 个字符。

在这种情况下,

Filterxml() 将在这里为您提供最佳伴侣。尝试-

=FILTERXML("<t><s>"&SUBSTITUTE(FILTERXML("<t><s>"&SUBSTITUTE(A1," for","</s><s>")&"</s></t>","//s[1]")," ","</s><s>")&"</s></t>","//s[last()]")

使用 FILTERXML,并测试 PON 之后的子字符串,您可以尝试:

=FILTERXML("<t><s>"&SUBSTITUTE(TRIM(A1)," ","</s><s>") & "</s></t>","//s[contains(.,'PON')]/following-sibling::*[string-length(.)>2][1]")

请注意,FILTERXML 解决方案将导致纯数字但带有前导零的 PON 丢弃前导零。不幸的是,该函数中的 xPath 实现不包括 string() 函数

如果删除前导零可能有问题,您可以向节点添加一个字符,强制将数字视为字符串。在下面修改后的公式中,我使用了 unicode 零宽度 space,但您还可以使用其他公式。请注意,这将算作 string=length 函数的一个字符,因此请务必保持 >2 参数 :

=FILTERXML("<t><s>"&SUBSTITUTE(TRIM(A1)," ","</s><s>"&UNICHAR(8203)) & "</s></t>","//s[contains(.,'PON')]/following-sibling::*[string-length(.)>2][1]")

由于数据的可变性,有时 PON 和所需提取物之间存在无关的 space 分隔子字符串,xpath:

  • 定位子串PON
  • returns 字符串长度超过两个的所有后续兄弟(必要时调整
    • returns 满足该条件的第一个兄弟姐妹。