我试图找到一个单一的公式(最好,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,但失败-它不选择(@)右侧的名称
1条答案
按热度按时间pjngdqdw1#
可以使用
FILTERXML
:如果结果没有
SPILL
下降(我不记得2016是否有这个功能,那么你可以通过添加INDEX
函数并填写公式直到你得到空白来返回单个结果:结果
如果你真的希望它在逗号分隔的字符串中,而不是在单独的单元格中,那么你可以在早期版本中使用:
或者,正如@joswoolley在下面的评论中指出的那样,你可以使用
CONCAT
函数,我没有意识到Excel 2016中有这个函数:结果