Проверьте, содержит ли ячейка все значения, разделенные запятыми - PullRequest
0 голосов
/ 02 июля 2018

У меня есть лист со следующими данными:

| 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

Это работает, как и ожидалось. Я получаю 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 ]

0 голосов
/ 03 июля 2018

Пожалуйста, смотрите также:

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

  • (?i) - без учета регистра
  • ( |$) - пробел или конец текста, для соответствия только целым словам.

Вариант ArrayFormula для ячейки C1:

=ArrayFormula(TRANSPOSE(NOT(REGEXMATCH(QUERY(TRANSPOSE(filter(REGEXMATCH(A:A,"(?i)"&SPLIT(B:B,",")&"( |$)"),A:A<>"")),,10^99),"FALSE"))))
0 голосов
/ 02 июля 2018

Попробуйте разделить список, разделенный запятыми, и использовать массив разбиения, как диапазон ячеек.

=SUMPRODUCT(--isnumber(search(split(B2, ",", true, true), A2)))=counta(split(B2, ",", true, true))
'full word search
=SUMPRODUCT(--isnumber(search(text(split(B2, ",", true, true), " @ "), text(A2, " @ "))))=counta(split(B2, ",", true, true))

enter image description here

...