Формула Excel для разделения определенных строк при наличии разнообразного текста

#excel #excel-formula

#excel #excel-формула

Вопрос:

У меня есть куча данных, из которых я хочу извлечь все «sample1:» и любые буквы, которые идут сразу после него. Я не уверен, что лучший способ — отделить все sample1 от остальных строк в ячейках или что. Но в принципе, «sample1:» может содержать несколько следующих за ним букв, и оно может находиться в начале, середине или конце строки. Я приложил скриншот формата данных — например, я хочу извлечь все, что идет после sample1: и перед ; (например. sample1:A,B, C;sample3:20 будет извлекать только «sample1:A,B, C»)

введите описание изображения здесь

Ответ №1:

Если у вас есть Excel O365, вы могли бы использовать LET() , например:

 =LET(X,SEARCH("sample1:",A2),Y,SEARCH(";",A2amp;";",X),MID(A2,X 8,Y-X-8))
 

В случае Excel 2013 или более поздней версии вы можете использовать FILTERXML() , например:

 =FILTERXML("<t><s>"amp;SUBSTITUTE(SUBSTITUTE(A2,":",";"),";","</s><s>")amp;"</s></t>","//s[preceding::*[1]='sample1']")
 

Во (AFAIK) всех версиях Excel вы можете продолжать использовать SEARCH() :

 =MID(A2,SEARCH("sample1:",A2) 8,SEARCH(";",A2amp;";",SEARCH("sample1:",A2))-SEARCH("sample1:",A2)-8)
 

введите описание изображения здесь


Если вам нужно сохранить «sample1» там:

 =LET(X,SEARCH("sample1:",A2),Y,SEARCH(";",A2amp;";",X),MID(A2,X,Y-X))
 

Или:

 =FILTERXML("<t><s>"amp;SUBSTITUTE(A2,";","</s><s>")amp;"</s></t>","//s[starts-with(.,'sample1:')]")
 

Или:

 =MID(A2,SEARCH("sample1:",A2),SEARCH(";",A2amp;";",SEARCH("sample1:",A2))-SEARCH("sample1:",A2))
 

Комментарии:

1. Спасибо! Но если я надеюсь сохранить образец 1 без изменений со всеми буквами A, B, C, будут ли они по-прежнему работать? Кроме того, это будет применяться для> 1000 строк, поэтому хотелось бы иметь надежное решение, в котором мне не нужно подсчитывать количество целых чисел для добавления / вычитания, чтобы получить начало «string1»

2. Что не является надежным в этих решениях? В любом случае, то, что вы хотите, легко сделать. Просто повозитесь с формулами, чтобы сохранить текст sample1

3. LEN("sample:1") может использоваться вместо жестко запрограммированного 8… если я правильно прочитал и понял формулы

4. Спасибо, что показали эту функцию LET. Никогда не видел этого раньше, но делает обрезку текста в целом менее сложной.

5. @ForwardEd, я только что удалил -8 на самом деле. Тогда будет работать просто отлично.