我有一个Excel数据库查询来获取分配给每个用户的所有RBAC用户角色,并且数据库返回每个用户角色之间以&(与号)分隔的字符串,例如:
&Admin&Supervisor&ViewReports&WriteReports&
我的查询过滤仅包含匹配字符串(例如Reports
)的记录。但是,它仍会返回匹配用户的用户角色的完整列表,在这种情况下,某些用户已分配了10个以上的角色,这使该表看起来确实很凌乱,不适合打印。
我可以手动清理每一行,但是有很多行,而且由于它将定期运行,所以我想知道是否可能存在一个好的Excel公式或VBS方法来分割行的定界部分字符串,并且仅保留符合字符串条件的字符串。
我知道“文本到列”及其使用定界符的能力,但它只会散出大量列,并使情况变得更糟。我已经完成了一些有关在Excel中清理分隔字符串的搜索,但找不到与我的情况类似的任何结果:需要分割分隔字符串并做一些RegEx式的操作,以仅保留与模式匹配的部分。>
理想情况下,我想将清理后的结果保存在单个单元格中,因此上面的示例&Admin&Supervisor&ViewReports&WriteReports&
看起来像:
ViewReports WriteReports
或
ViewReports,WriteReports
或类似内容,在一个单元格中。真的对格式不是太挑剔,只需要删除字符串中无关的部分即可。
答案 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年出现,因此在早期版本中将不起作用。
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
或其他任何内容。