У меня есть эта формула для извлечения определенного слова, которое начинается с заданных символов «CCLVL». Однако он работает нормально, мне также нужна формула для извлечения слов, начинающихся с «GCFAC» или «CLINK».
Как я могу заставить его найти эти другие слова — в тексте, из которого я извлекаю, никогда не должно быть более одного экземпляра слова.
=TRIM(LEFT(SUBSTITUTE(MID(A2,FIND("CCLVL",A2),LEN(A2))," ",REPT(" ",100)),100))
В описании есть CCLVL123456
? Если да, то это третья сторона CCLVL123456
Содержит ли описание GCFAC4567
Если да, то это третья сторона
Содержит ли описание CLINK95182
Если да, то это третья сторона
Общая идея здесь состоит в том, чтобы разрезать строку на массив слов, используя FILTERXML
и некоторый xpath, чтобы возвращать только те слова из этого массива, которые нас интересуют. К счастью, есть функция starts-with()
, которую мы можем использовать в структуре or:
=FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s[starts-with(., 'CCLVL') or starts-with(., 'GCFAC') or starts-with(., 'CLINK')]")
В Excel365 это вернет вертикальный массив, поэтому вы можете использовать TRANSPOSE()
или TEXTJOIN()
в сочетании. Кроме того, если у вас нет Excel365, вы можете использовать INDEX()
для извлечения элементов из массива по порядку.
В приведенном ниже примере я использовал:
=TEXTJOIN(",",,FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(A1,"?","")," ","</s><s>")&"</s></t>","//s[starts-with(., 'CCLVL') or starts-with(., 'GCFAC') or starts-with(., 'CLINK')]"))
Чтобы лучше понять вышеизложенное, смотрите этот пост.
Формула УДИВИТЕЛЬНАЯ, как раз то, что мне было нужно!! Спасибо Вам большое.
Можно ли объединить эту формулу с другой формулой, чтобы сделать следующее: Посмотрите в ячейку C2, и если ячейка начинается с ABC или DEF, поместите содержимое ячейки, иначе выполните формулу выше. Если ячейка A2 или ячейка C2 не содержат ни того, ни другого, оставьте поле пустым. (обратите внимание, ячейка B2 содержит формулу)
ДОГАДАТЬСЯ!! Вот формула, которую я получил ------ =ЕСЛИ(ЧИСЛО(ПОИСК("abc",A7)),A7,ЕСЛИ(ЧИСЛО(ПОИСК("DEF",A7)),A7, ЕСЛИОШИБКА(@FILTERXML("<t><s>"&SUBSTITUTE(B7," ","</s><s>")&"</s></t>","//s [начинается с (., 'CCLVL') или начинается с (., 'GCFAC') или начинается с (., 'CLINK') или начинается с (., 'CCQWC') или начинается с (. , 'CCQWA')]"),"")))
Ваше объяснение каждой строки действительно превосходно. Мы, все еще изучающие Excel, должны читать ваши ответы сверху донизу построчно.