1. 概述
1.1 应用场景
有时候我们要判断一个多项字符串是否至少有一项被另外个字符串包含。
如:有一批货原本是属于"A 供货商,B 供货商"的,结果却被"B 供货商,C 供货商"拼车拉走了。
这批货有没有出问题呢,只要判断"A 供货商,B 供货商"中是否至少有一项在"B 供货商,C 供货商"中,如果有就没问题。
1.2 实现思路
将两个字符串都转化为数组,判断一个数组的每一项是否存在其中一项在另外个数组中,如果有,则包含,否则不包含。
2. 解决步骤
1)将字符串1分割成数组:=SPLIT(字符串1,",")
2)确保第二个字符串转化为数组:=IF(FIND(",", 字符串2) > 0,SPLIT(字符串2,","), ARRAY(字符串2))
这是因为字符串 2 中如果没有分隔符,则=SPLIT(字符串2,",")的结果还是一个字符串。
字符串 1 就算没转化成功也能参与后面的运算,就不强制。
3)判断字符串1转化的数组的每一项是否存在字符串 2 数组中:=GREPARRAY(字符串1数组, INARRAY(item, SPLIT(字符串2数组,",")) > 0)
这里使用了 INARRAY( ) 函数来判断是否存在, INARRAY( ) 的第二个参数一定要是数组,这就是第二步需要强制转化的原因。
4)判断上一步结果的项数,项数大于0则包含,否则不包含:=IF(LEN(上一步结果)>0,"包含","不包含")
5)综合判断公式为:=IF(LEN(GREPARRAY(SPLIT(字符串1,","), INARRAY(item, IF(FIND(",", 字符串2) > 0, SPLIT(字符串2,","), ARRAY(字符串2))) > 0)) > 0, "包含", "不包含")
3. 示例
3.1 模板设计
1)将数据集字段拖到单元格 A2、B2 ,如下图所示:
2)依次选中 C2~G2 单元格,设置形态公式,如下表所示:
单元格 | 公式 | 作用 |
C2 | SPLIT(A2,",") | 将字符串1分割成数组 |
D2 | IF(FIND(",", B2) > 0, SPLIT(B2,","), ARRAY(B2)) | 第二个字符串转化为数组 |
E2 | GREPARRAY(C2, INARRAY(item, SPLIT(D2,",")) > 0) | 判断字符串1转化的数组的每一项是否存在字符串 2 数组 |
F2 | IF(LEN(E2)>0,"包含","不包含") | 判断上一步结果的项数,项数大于0则包含,否则不包含 |
G2 | IF(LEN(GREPARRAY(SPLIT(A2,","), INARRAY(item, IF(FIND(",", B2) > 0, SPLIT(B2,","), ARRAY(B2))) > 0)) > 0, "包含", "不包含") | 整合公式 |
3.2 效果预览
1)PC端
保存模板,点击PC端预览,如下图所示:
2)移动端
4. 模板下载
点击下载模板:判断多项字符串至少一项被包含.cpt