2016-12-02 67 views
2

在數據庫抽取中,每行都有一個單元格,其中包含逗號分隔的標籤列表。我需要一個公式來將這些單元格中的每一個過濾到特定的子集。Google表格/ Excel公式將逗號分隔列表減少爲特定子集

我有一個基本的工作版本,但它非常詳細。

標籤列表在C列中。 我想保留的標籤的子集當前位於單獨工作表(名爲「子集」)上的A1:A10中。

我的基本版本爲A1中的每個單元連接相同的子公式A1:A10。每個子公式測試FIND(SubsetTag,TagList)是否返回一個數字,如果是,則輸出SubsetTag,後跟「,」以建立包含所有匹配的字符串,例如

=IF(ISNUMBER(FIND(Subset!A$1,C2)),Subset!A$1&", ","") & IF(ISNUMBER(FIND(Subset!A$2,C2)),Subset!A$2&", ","") & IF(ISNUMBER(FIND(Subset!A$3,C2)),Subset!A$3&", ","") & IF(ISNUMBER(FIND(Subset!A$4,C2)),Subset!A$4&", ","") & IF(ISNUMBER(FIND(Subset!A$5,C2)),Subset!A$5&", ","") & IF(ISNUMBER(FIND(Subset!A$6,C2)),Subset!A$6&", ","") & IF(ISNUMBER(FIND(Subset!A$7,C2)),Subset!A$7&", ","") & IF(ISNUMBER(FIND(Subset!A$8,C2)),Subset!A$8&", ","") & IF(ISNUMBER(FIND(Subset!A$9,C2)),Subset!A$9&", ","") & IF(ISNUMBER(FIND(Subset!A$10,C2)),Subset!A$10&", ","") 

有沒有一種很好的方法來使用公式來做到這一點? (我想避免腳本)

理想情況下,我想概括公式,所以它不需要更新時,子集增長超出A1:A10,並希望避免尾隨逗號:)

回答

1

這裏是一個谷歌表格解決方案,使用regexmatch

=join(",", filter(Subset!A1:A10, regexmatch(C2, "\b" & Subset!A1:A10 & "\b"))) 

在範圍A1中的組:A10過濾下來的那些的量,串C2形式\btag\b的正則表達式匹配的標籤,這意味着C2絕包含標籤作爲單獨的詞(\b是詞邊界)。然後將過濾的數組加入到一個新的逗號分隔字符串中。

如果C2中不包含任何標籤,則公式將返回錯誤消息#N/A。如果您在這種情況下更喜歡空輸出,請將公式包裝在=iferror()中。

2

可以用陣列式CONCAT()

=LEFT(CONCAT(IF(ISNUMBER(FIND(M8:M10,J8)),M8:N10,"")),LEN(CONCAT(IF(ISNUMBER(FIND(M8:M10,J8)),M8:N10,"")))-2) 

組合要這樣做其中:

  • M8:M10是標記列表,
  • N8: N10是字符串「」的列表,
  • J8是您正在搜索的字符串

確保您按控制+ Shift +輸入當您完成公式。

LEFT()部分是刪除最終的逗號。

相關問題