代码之家  ›  专栏  ›  技术社区  ›  Liu Kang

检查单元格是否包含所有逗号分隔的值

  •  2
  • Liu Kang  · 技术社区  · 6 年前

    我有一张包含以下数据的工作表:

    | Text                                    | Value    |  Value   |  Value   |
    |:----------------------------------------|:---------|:---------|:---------|
    |Jax and Jax friend Kung Lao fight Raiden | jax      | kung lao | raiden   |
    |Jax and Jax friend Kung Lao fight Raiden | kitana   | kung lao | raiden   | 
    

    以及以下公式:

    =SUMPRODUCT( -- ISNUMBER(SEARCH(B1:D1;A1)))=COUNTA(B1:D1)
    =SUMPRODUCT( -- ISNUMBER(SEARCH(B2:D2;A2)))=COUNTA(B2:D2)
    

    返回:

    TRUE
    FALSE
    

    这按预期工作。我明白了 真的 在文本单元格中找到所有值,并且 错误的 如果一个或全部丢失。

    现在,我想修改,所以我只想在一个逗号分隔的单元格中搜索,而不是在多个单元格中搜索。这样地:

    | Text                                    | Values                 | Formula |
    |:----------------------------------------|:-----------------------|:--------|
    |Jax and Jax friend Kung Lao fight Raiden | jax,kung lao,raiden    | TRUE    |
    |Jax and Jax friend Kung Lao fight Raiden | kitana,kung lao,raiden | FALSE   |
    

    我试过了 =SUMPRODUCT( -- ISNUMBER(SEARCH({B2};A2)))=COUNTA({B2}) 但它不起作用。

    2 回复  |  直到 6 年前
        1
  •  2
  •   user4039065    6 年前

    尝试拆分逗号分隔的列表,并使用拆分数组(如单元格区域)。

    =sumproduct(--isNumber(search(split(b2,“,”,true,true),a2)))=counta(split(b2,“,”,true,true))
    '全字搜索
    =sumproduct(--isNumber(搜索(文本(split(b2,“,”,true,true),“@”),文本(a2,“@”))=counta(split(b2,“,”,true,true))
    
    
    

    enter image description here

        2
  •  1
  •   Max Makhrov    6 年前

    另请参见:

    =AND(ARRAYFORMULA(REGEXMATCH(A1,"(?i)"&SPLIT(B1,",")&"( |$)")))

    • (?i) -不区分大小写
    • ( |$) -文本的空格或结尾,仅匹配整个单词。

    细胞C1的排列形态变异:

    =ArrayFormula(TRANSPOSE(NOT(REGEXMATCH(QUERY(TRANSPOSE(filter(REGEXMATCH(A:A,"(?i)"&SPLIT(B:B,",")&"( |$)"),A:A<>"")),,10^99),"FALSE"))))