需要从分隔的Excel字符串中删除不匹配的文本
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了需要从分隔的Excel字符串中删除不匹配的文本相关的知识,希望对你有一定的参考价值。
我有一个Excel数据库查询来获取分配给每个用户的所有RBAC用户角色,并且数据库返回由每个用户角色之间用&(和号)分隔的字符串,例如:
&Admin&Supervisor&ViewReports&WriteReports&
我的查询过滤只有匹配字符串的记录,让我们说它是Reports
。但是,它仍然返回匹配用户的完整用户角色列表,在这种情况下,某些用户分配了> 10个角色,这使得表看起来非常混乱,不适合打印。
我可以手动清理每一行,但是它们有很多,而且由于这将会定期运行,我想知道是否有一个好的Excel公式或VBS方法来分割字符串的分隔部分而且只有保留符合字符串条件的那些。
我知道“文本到列”及其使用分隔符的能力,但它只是吐出大量的列并使事情变得更糟。我已经完成了几次关于在Excel中清理分隔字符串的搜索但是找不到与我的情况类似的任何结果:需要拆分分隔字符串并执行一些RegEx-esque以仅保留与模式匹配的部分。
理想情况下,我想将清理后的结果保存在单个单元格中,因此上面的示例&Admin&Supervisor&ViewReports&WriteReports&
将如下所示:
ViewReports WriteReports
要么
ViewReports,WriteReports
或类似的,在一个单元格中。真的不太挑剔格式化,只需要字符串的非相关部分消失。
您可以使用trim,mid和substitute的组合来查找您的值,以便使用上面的示例:
如果您有一个空白的Excel工作表,并将您的示例添加到单元格A3,然后将1,2,3和4放在单元格B2,C2,D2,E2中,则使用将此公式复制到单元格B3中:
=TRIM(MID(SUBSTITUTE($A3,"&",REPT(" ",LEN($A3))),(B$2-1)*LEN($A3)+1,LEN($A3)))
这应该给你值“管理员”。
之后只需将公式拉到右侧,您将获得示例中的所有4个值。如果您需要更多解释,请告诉我。
有关此等式的更多信息,请参阅网页:https://exceljet.net/formula/split-text-with-delimiter
此公式适用于Excel / Office 365.由于2016年出现的TEXTJOIN
函数,它在早期版本中无效。
- 假设数据是如上所述的简单字符串(即,不是可能包含所创建节点的重复的XML文档。如果是这种情况,则存在另一种分割我们可以使用的字符串的方法)。
- 用
FILTERXML
分割&符号上的字符串 - 使用
INDEX
函数的变体返回匹配部分的数组 - 用
TEXTJOIN
连接这些部分
=TEXTJOIN(" ",TRUE,INDEX(FILTERXML("<t><s>" & SUBSTITUTE(A1,"&","</s><s>")&"</s></t>","//s"),N(IF(1,{3,5}))))
…N(IF(1,{3,5}))…
部分是如何从INDEX
函数返回值数组。在这种情况下,3
和5
指的是第三个和第五个&符号之前的值。请注意,1
会返回错误,因为在第一个&符号之前没有任何内容。
您可以返回任何您想要的元素。您只需要知道(或使用MATCH
函数计算)正确的索引号。
请注意,使用TEXTJOIN
,您可以指定所需的分隔符。我指定了space
,但你可以指定comma
或任何东西。
以上是关于需要从分隔的Excel字符串中删除不匹配的文本的主要内容,如果未能解决你的问题,请参考以下文章