Google sheets 在Google Sheets中以随机顺序搜索多个子字符串

Google sheets 在Google Sheets中以随机顺序搜索多个子字符串,google-sheets,Google Sheets,我遇到了一个问题,涉及到无序子字符串的匹配集:首先最容易安排它,我认为: Qualification Requirements Silver B2 and R5 and Z3 Gold Z3 and R4 and B3 Platinum (B2 and R6) or (Z3 and B6) Candidates Codes Qualifications Fred R3 Z5 Z3 B6 Platinum Joan Z3 R3 R4 B

我遇到了一个问题,涉及到无序子字符串的匹配集:首先最容易安排它,我认为:

Qualification Requirements      
Silver  B2 and R5 and Z3    
Gold    Z3 and R4 and B3    
Platinum    (B2 and R6) or (Z3 and B6)

Candidates  Codes   Qualifications
Fred    R3 Z5 Z3 B6 Platinum
Joan    Z3 R3 R4 B6 Platinum
William Z3 B2 R4 R5 Silver
Tanya   B6 R4 Z3 B3 Gold & Platinum
Sarah   B5 R4 Z3 B1 No soup for you!
其想法是,候选人名单(和相关代码)和资格要求都将随着时间的推移而变化。我最初希望用regex(我认为(?=.*B3)(?=.*Z3)或类似的东西来替换资格要求列表,然后在vlookup或其他东西中使用regexmatch,但它需要一些regex特性(前瞻性),我相信表单regex工具没有这些特性。也许还有另一种方法可以做到这一点,但我还没有想到,所以欢迎所有的建议! 约束条件,如果不明显: 每个候选人的代码列表将是无序的,可能满足零或更多资格要求。如果资格要求在某种程度上是可读的,并且它们必须具有and、or和分组功能,那就好了。至少,这是我的愿望清单


谢谢

这不是最优雅的解决方案,但它确实有效。 在“代码”右侧的列中,用以下文字表示黄金:

=IF(和(RegExMatch(B2,Z3)、RegExMatch(B2,B2)、RegExMatch(B2,R5))、Silver、“”)

在右边的一栏中,写下银色:

=IF(和(RegExMatch(B2,Z3)、RegExMatch(B2,R4)、RegExMatch(B2,B3))、“Gold”和“)

在该栏右侧的栏中,将这一项用于铂金:

=如果(和(和)(RegExMatch(B2,“B2”)、RegExMatch(B2,“R6”)、和(RegExMatch(B2,“Z3”)、RegExMatch(B2,“B6”))、“白金”和“)

然后在该栏右侧的栏中,将其作为总奖励:

=修剪(C2&&D2&&E2)

向下拖动公式。可以隐藏金、银和白金柱。如果资质发生变化,则应易于维护

如果您想直接从资格要求中获得资格,请使用以下公式替换上述公式。他们假设资格要求如表1所示:

=IF(AND(RegExMatch($B2,index(split(REGEXREPLACE(Sheet1!$B$2,"and","")," "),0,1)),RegExMatch($B2,index(split(REGEXREPLACE(Sheet1!$B$2,"and","")," "),0,2)),RegExMatch($B2,index(split(REGEXREPLACE(Sheet1!$B$2,"and","")," "),0,3))),"Silver","")   

=IF(AND(RegExMatch($B2,index(split(REGEXREPLACE(Sheet1!$B$3,"and","")," "),0,1)),RegExMatch($B2,index(split(REGEXREPLACE(Sheet1!$B$3,"and","")," "),0,2)),RegExMatch($B2,index(split(REGEXREPLACE(Sheet1!$B$3,"and","")," "),0,3))),"Gold","")

=IF(or(AND(RegExMatch($B2,index(split(REGEXREPLACE(Sheet1!$B$4,"[()]*[or]*[and]*","")," "),0,1)),RegExMatch($B2,index(split(REGEXREPLACE(Sheet1!$B$4,"[()]*[or]*[and]*","")," "),0,2))),AND(RegExMatch($B2,index(split(REGEXREPLACE(Sheet1!$B$4,"[()]*[or]*[and]*","")," "),0,3)),RegExMatch($B2,index(split(REGEXREPLACE(Sheet1!$B$4,"[()]*[or]*[and]*","")," "),0,4)))),"Platinum","")