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