Вернуть true / false для [строк в ячейке], найденных в [строк в другой ячейке]? - PullRequest
0 голосов
/ 14 октября 2019

Ячейка A1 содержит несколько строк, например, «CAT DOG RAT GNU»;

Ячейка B1 содержит несколько строк, например, «RAT CAT»;

Как выполнить тест (используя формулув C1), чтобы найти, если все строки в B1 присутствуют в ячейке A1?

  • Возвращение true / false было бы хорошо
  • Строки не обязательно в том же порядке, как в примере выше
  • Количество элементов может варьироваться
  • Несколько экземпляров не проблема, если они есть
  • Но возвращает true, только если все элементы в ячейке B1 присутствуют вячейка A1.

До сих пор я пробовал массивы транспонированных разбиений с просмотрами и совпадениями, подсчетами и т. д., но у меня ничего не получалось. (А может быть, регулярное выражение не сделает этого, поскольку не может зацикливаться для каждой строки?)

1 Ответ

0 голосов
/ 14 октября 2019

вы можете попробовать:

=ARRAYFORMULA(IF(PRODUCT(N(NOT(ISNA(REGEXEXTRACT(SPLIT(B1, " "), 
 SUBSTITUTE(A1, " ", "|"))))))=1, TRUE))

0

, для большей точности вы можете сделать:

=ARRAYFORMULA(IF(PRODUCT(N(NOT(ISNA(REGEXEXTRACT(SPLIT(B1, " "), 
 "^"&SUBSTITUTE(A1, " ", "$|^")&"$")))))=1, TRUE))

0

тогда для нечувствительности к регистру:

=ARRAYFORMULA(IF(PRODUCT(N(NOT(ISNA(REGEXEXTRACT(SPLIT(LOWER(B1), " "), 
 "^"&SUBSTITUTE(LOWER(A1), " ", "$|^")&"$")))))=1, TRUE))

0


и true ArrayFormula будет иметь вид:

=ARRAYFORMULA(IF((A1:A<>"")*(B1:B<>""), IF(REGEXMATCH(TRANSPOSE(QUERY(TRANSPOSE(IFERROR(
 REGEXMATCH(IF(SPLIT(B1:B, " ")<>"", SPLIT(LOWER(B1:B), " "), 0), 
 "^"&SUBSTITUTE(LOWER(A1:A), " ", "$|^")&"$"))),,999^99)), "FALSE"), FALSE, TRUE), ))

0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...