需要从定界的Excel字符串中删除不匹配的文本

时间:2019-04-26 17:52:41

标签: excel excel-formula office365

我有一个Excel数据库查询来获取分配给每个用户的所有RBAC用户角色,并且数据库返回每个用户角色之间以&(与号)分隔的字符串,例如:

&Admin&Supervisor&ViewReports&WriteReports&

我的查询过滤仅包含匹配字符串(例如Reports)的记录。但是,它仍会返回匹配用户的用户角色的完整列表,在这种情况下,某些用户已分配了10个以上的角色,这使该表看起来确实很凌乱,不适合打印。

我可以手动清理每一行,但是有很多行,而且由于它将定期运行,所以我想知道是否可能存在一个好的Excel公式或VBS方法来分割行的定界部分字符串,并且仅保留符合字符串条件的字符串。

我知道“文本到列”及其使用定界符的能力,但它只会散出大量列,并使情况变得更糟。我已经完成了一些有关在Excel中清理分隔字符串的搜索,但找不到与我的情况类似的任何结果:需要分割分隔字符串并做一些RegEx式的操作,以仅保留与模式匹配的部分。

理想情况下,我想将清理后的结果保存在单个单元格中,因此上面的示例&Admin&Supervisor&ViewReports&WriteReports&看起来像:

ViewReports WriteReports

ViewReports,WriteReports

或类似内容,在一个单元格中。真的对格式不是太挑剔,只需要删除字符串中无关的部分即可。

2 个答案:

答案 0 :(得分:0)

您可以结合使用修剪,中间和替代来找到您的值,因此请使用上面的示例:

如果oyu的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)))

这应该为您提供“ Admin”值。

之后,只需将公式向右拉,您将在示例中获得所有4个值 请让我知道是否需要更多说明。

有关此方程式的更多信息,请参见网页: https://exceljet.net/formula/split-text-with-delimiter

答案 1 :(得分:0)

此公式将在Excel / Office 365中使用。由于TEXTJOIN函数于2016年出现,因此在早期版本中将不起作用。

  • 假设数据是上述的简单字符串(即不是一个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函数返回值数组。在这种情况下,35指的是之前和之后的第三和第五个值。请注意,1将返回错误,因为第一个&号之前没有任何内容。

您可以返回所需的任何元素。您只需要知道(或使用MATCH函数进行计算)正确的索引号即可。

请注意,使用TEXTJOIN可以指定所需的任何定界符。我指定了space,但是您可以指定comma或其他任何内容。

enter image description here