excel 如何提取在单个单元格内不同位置可能出现多次的特定字符之前的文本

khbbv19g  于 2023-04-22  发布在  其他
关注(0)|答案(1)|浏览(155)

我试图找到一个单一的公式(最好,Excel 2016)/VBA解决方案,将在我的情况下工作.基本上我有一个列,每个单元格包含不同的文本,看起来像这样
Google(@),Microsoft(#),Hewlett and Packard(@),Tesla($),random text i run out of names(@),another random text(%)
其中x是不同的文本。我需要提取所有的值之前出现(@)和(@)可以出现多达3次在同一单元格内放置随机(beginiing,中间,结束)。输出应该看起来像
谷歌,惠普和帕卡德,随机文本我用完的名字
最好的解决方案是什么?谢谢!
尝试了这个解决方案
=CONCATENATE(TRIM(LEFT(SUBSTITUTE(MID(B3,FIND(“~~",SUBSTITUTE(B3,"@","~~",1)),LEN(B3)),”“,REPT(““,100),1),100)),",",TRIM(LEFT(SUBSTITUTE(MID(B3,FIND(“~~",SUBSTITUTE(B3,"@","~~",2)),LEN(B3)),”“,REPT(““,100),1),100)))
将LEFT更改为RIGHT,但失败-它不选择(@)右侧的名称

pjngdqdw

pjngdqdw1#

可以使用FILTERXML

=SUBSTITUTE(FILTERXML("<t><s>" & SUBSTITUTE(A1,",","</s><s>") & "</s></t>","//s[contains(.,'(@)')]"),"(@)","")

如果结果没有SPILL下降(我不记得2016是否有这个功能,那么你可以通过添加INDEX函数并填写公式直到你得到空白来返回单个结果:

=IFERROR(INDEX(SUBSTITUTE(FILTERXML("<t><s>" & SUBSTITUTE($A$1,",","</s><s>") & "</s></t>","//s[contains(.,'(@)')]"),"(@)",""),ROWS($1:1)),"")

结果

如果你真的希望它在逗号分隔的字符串中,而不是在单独的单元格中,那么你可以在早期版本中使用:

=TRIM(SUBSTITUTE(FILTERXML("<t><s>"&SUBSTITUTE($A$1,",","</s><s>")&"</s></t>","//s[contains(.,'(@)')][1]"),"(@)",""))
& IFERROR(", " &  TRIM(SUBSTITUTE(FILTERXML("<t><s>"&SUBSTITUTE($A$1,",","</s><s>")&"</s></t>","//s[contains(.,'(@)')][2]"),"(@)","")),"")
& IFERROR(", " &  TRIM(SUBSTITUTE(FILTERXML("<t><s>"&SUBSTITUTE($A$1,",","</s><s>")&"</s></t>","//s[contains(.,'(@)')][3]"),"(@)","")),"")

或者,正如@joswoolley在下面的评论中指出的那样,你可以使用CONCAT函数,我没有意识到Excel 2016中有这个函数:

=REPLACE(CONCAT(", "&SUBSTITUTE(FILTERXML("<t><s>"&SUBSTITUTE(A1,",","</s><s>")&"</s></t>","//s[contains(.,'(@)')]")," (@)","")),1,2,"")

结果

相关问题