使用 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 满足该条件的第一个兄弟姐妹。
我不知道从哪里开始使用公式,因为我对所有事情都感到困惑。我有一个包含“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 满足该条件的第一个兄弟姐妹。