Страницы: 1
RSS
Извлечение из ячейки части текста, возможно ли решить данную задачу формулой
 
Всем здравствуйте, подскажите пожалуйста возможно ли формулой в эксель извлечь часть текста. В примере столбец А - исходный текст, Столбец B - период который необходимо извлечь. Всего три вида периодов ( мес., год, час)
 
 
Павел Иванов, А  водной ячейке несколько может быть?
Не бойтесь совершенства. Вам его не достичь.
 
Цитата
Павел Иванов написал:
формулой в эксель извлечь часть текста
Такая не устроит?
Код
=ПСТР(A3;ПОИСК(" ";A3)+1;99)
 
вот такое  изовра
Код
=ОБЪЕДИНИТЬ(" ";;ФИЛЬТР.XML("<j><i>"&ПОДСТАВИТЬ(A3;" ";"</i><i>")&"</i></j>";"//i[position()>count(//i)-2]"))
Соблюдение правил форума не освобождает от модераторского произвола
 
gling, не совсем так. К примеру, строка 12. Выдает результат 100 документов 24 час, а должно быть просто 24 час
 
Павел Иванов, может так
Код
=ПРАВСИМВ(A3;ДЛСТР(A3)-НАЙТИ(СИМВОЛ(1);ПОДСТАВИТЬ(A3;" ";СИМВОЛ(1);ДЛСТР(A3)-ДЛСТР(ПОДСТАВИТЬ(A3;" ";""))-1)))
Не бойтесь совершенства. Вам его не достичь.
 
если в любом месте и только перечисленное, то по-быстрому так, массивно
=IFERROR(TRIM(--RIGHT(SUBSTITUTE(LEFT(A3;MIN(IFERROR(FIND({" мес. ";" час ";" год "};A3&" ");1=0))-1);" ";REPT(" ";15));15)&LEFT(SUBSTITUTE(MID(A3;MIN(IFERROR(FIND({" мес. ";" час ";" год "};A3&" ");1=0));5)&" ";" ";REPT(" ";15));30));"")
Если подумать, то тоже масиивно
=IFERROR(TRIM(RIGHT(SUBSTITUTE(TRIM(LEFT(A3;1/(1/MIN(IFERROR(FIND({" мес. ";" час ";" год "};A3&" ");1=0)))+4));" ";REPT(" ";15));30));"")
Изменено: БМВ - 05.05.2021 20:55:07
По вопросам из тем форума, личку не читаю.
 
buchlotnik, да, почти так, но как исключить к примеру ячейки, где нет значений (час, мес., год) к примеру строка 10 и 11

БМВ, отличный вариант, спасибо большое, все работает
 
UDF не подойдет?
Код
Function iPeriod(cell$)
 With CreateObject("VBScript.RegExp")
     .Pattern = "\d+\s?(мес\.|час|год)"
   If .test(cell) Then
     iPeriod = .Execute(cell)(0)
   Else
     iPeriod = ""
   End If
 End With
End Function
 
Павел Иванов,
Код
=ЕСЛИОШИБКА(СЖПРОБЕЛЫ(ПРАВСИМВ(A3;ДЛСТР(A3)-ПОИСК(ПРОСМОТР(2;1/ПОИСК({"мес";"час";"мин";"год"};A3);{"мес";"час";"мин";"год"});A3)+4));"")
Не бойтесь совершенства. Вам его не достичь.
 
Цитата
Павел Иванов написал:  как исключить
Код
 =ЕСЛИ(СЧЁТ(ПОИСК({"час";"мес";"год"};A3));ОБЪЕДИНИТЬ(" ";;ФИЛЬТР.XML("<j><i>"&ПОДСТАВИТЬ(A3;" ";"</i><i>")&"</i></j>";"//i[position()>count(//i)-2]"));"")
Соблюдение правил форума не освобождает от модераторского произвола
 
Цитата
Павел Иванов написал: Отличный вариант,
не совсем, есть проще.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
есть проще
и хде? увидел  :)
Изменено: buchlotnik - 05.05.2021 20:53:07
Соблюдение правил форума не освобождает от модераторского произвола
 
buchlotnik,  Тезка, я выше ж добавил.
По вопросам из тем форума, личку не читаю.
 
еще вариант, массивная
Код
=ЕСЛИОШИБКА(СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(A3;" ";"     ");СУММ(ЕСЛИОШИБКА(НАЙТИ({"     мес":"     час":"     год"};ПОДСТАВИТЬ(A3;" ";"     "));0))-5;13));"")
 
Ну и еще в кучку:
Код
=IF(MAX(--ISNUMBER(SEARCH({"мес";" час";" мин";" год"};A3)))=1;TRIM(TRIM(RIGHT(SUBSTITUTE(A3;" ";REPT(" ";35));45)));"")
 
Мой вариант тоже не идеален, но рассчитывать что все буде в конце, да еще не встретится что либо подобное "частичное"  "минимальное" или "замес" - опрометчиво.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
встретится что либо подобное
Ну, если что тему всегда можно продлить  на второй сезон :)
Страницы: 1
Наверх