Страницы: 1
RSS
Вытащить определенное слово из предложения
 
Доброго дня, форумчане. Дан текст. Из него необходимо вытащить например 1, 4 и 7 слова по порядку. Не могу сообразить как это сделать.
 
Код
=ПОДСТАВИТЬ(ПРАВСИМВ(ПСТР(" "&ПОДСТАВИТЬ($A2;" ";ПОВТОР(" ";999));1;999*4);999);" ";"")

4 в формуле - какое по очереди слово вытягивать.
 
V, благодарю за помощь. Единственная проблема, если выбрать 4 или 7 слова, то они вытаскиваются с точкой - "гулять." и "отличная."
 
Код
=ИНДЕКС(ФИЛЬТР.XML("<r><s>"&ПОДСТАВИТЬ(ПОДСТАВИТЬ(СЖПРОБЕЛЫ(A2);".";"");" ";"</s><s>")&"</s></r>";"//s");{1:4:7})
Согласие есть продукт при полном непротивлении сторон
 
может и так (для длинных текстов):
=ПОДСТАВИТЬ(СЖПРОБЕЛЫ(ПРАВБ(ПОДСТАВИТЬ(ЛЕВБ(A$2;ПОИСК("|";ПОДСТАВИТЬ(A$2&" ";" ";"|";E2))-1);" ";ПОВТОР(" ";99));99));"."; )
ну или почти как у V, :
=ПОДСТАВИТЬ(СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(A$2&" ";" ";ПОВТОР(" ";999));(E2-1)*999+1;999));"."; )
 
А можно тоже самое, только вытаскивать не по горизонтали, а по строке?
Мы - весёлые ребята,
Мы - ребята-экселята.
 
Sanja, благодарю. На работе к сожалению только 2016 офис, посмотрю дома на 21 уже.
Павел \Ʌ/, супер, работает как надо.
Вопрос решён.
 
Цитата
Isa Balaev написал: по строке
Код
=ТРАНСП(ИНДЕКС(ФИЛЬТР.XML("<r><s>"&ПОДСТАВИТЬ(ПОДСТАВИТЬ(СЖПРОБЕЛЫ(A2);".";"");" ";"</s><s>")&"</s></r>";"//s");{1:4:7}))
Согласие есть продукт при полном непротивлении сторон
 
[QUOTE]Sanja , спасибо!
Мы - весёлые ребята,
Мы - ребята-экселята.
 
Без ИНДЕКС(), силами xpath
Код
=ФИЛЬТР.XML("<r><s>"&ПОДСТАВИТЬ(ПОДСТАВИТЬ(СЖПРОБЕЛЫ(A2);".";"");" ";"</s><s>")&"</s></r>";"//s[position()=1 or position()=4 or position()=7]")
Согласие есть продукт при полном непротивлении сторон
 
Sanja, силами покороче так
Код
"//s[1] | //s[4] | //s[7]"
 
Спасибо, пытался что-то такое соорудить)
Согласие есть продукт при полном непротивлении сторон
 
ну и уточнение, что массивная тоже не лишнее )
 
для тех версий, в которых эта формула в принципе работает, массивный ввод не требуется)
Согласие есть продукт при полном непротивлении сторон
 
Для Excel 365:
=ИНДЕКС(ТЕКСТРАЗД(A2;{" ";"."};;1);{1:4:7})
 
Кстати вместо сжпробелы можно использовать
Код
"//*/*[normalize-space()]"
"//*/*[.!='']"
"//*/*[string()]"
"//*/*[string-length(text()) > 0]
"//*/*[node()]"
"//*/*[text()]"
Изменено: Тимофеев - 07.02.2025 12:43:39
 
Тимофеев,  применительно к формуле как это будет выглядеть?
 
это я про формулу с использованием индекса и где могут быть двойные пробелы
Код
=ИНДЕКС(
ФИЛЬТР.XML("<r><s>"&ПОДСТАВИТЬ(ПОДСТАВИТЬ(A2;".";"");" ";"</s><s>")&"</s></r>";
"//*/*[.!='']");
{1:4:7})
Изменено: Тимофеев - 07.02.2025 12:32:23
 
Тимофеев, какую роль в паттерне играет звездочка? По какому тэгу узлу она будет работать?
Изменено: Sanja - 07.02.2025 12:47:43
Согласие есть продукт при полном непротивлении сторон
 
"//*" - r и s - и r в ошибке как пустое
"//*/*" - только s
а звездочка как обычно любое значение
Кстати такую конструкцию "//*"  можно использовать и прикручивать заголовок =еслиошибка(формула;"Заголовок")
Изменено: Тимофеев - 07.02.2025 12:53:47
 
Спасибо. Читаю учебник. Чертовски увлекательная штука)
Согласие есть продукт при полном непротивлении сторон
 
nilske, вот конечный вид тогда без сжпробелы
Код
=ФИЛЬТР.XML("<r><s>"&ПОДСТАВИТЬ(ПОДСТАВИТЬ(A2;".";"");" ";"</s><s>")&"</s></r>";
"//*/*[.!=''][1] | //*/*[.!=''][4] | //*/*[.!=''][7]")

или

Код
=ФИЛЬТР.XML("<r><s>"&ПОДСТАВИТЬ(ПОДСТАВИТЬ(A2;".";"");" ";"</s><s>")&"</s></r>";
"//*[text()][1] | //*[text()][4] | //*[text()][7]")
Код
=ЕСЛИОШИБКА(
ФИЛЬТР.XML("<r><s>"&ПОДСТАВИТЬ(ПОДСТАВИТЬ(A2;".";"");" ";"</s><s>")&"</s></r>";
"//*[1] | //*[4] | //*[7]");
"Заголовок")
Изменено: Тимофеев - 07.02.2025 13:16:32
 
Тимофеев, третий вариант выдал немного неожиданный результат
 
pq
 
nilske, у меня не повторяется неожиданности
 
Тимофеев, так у ваших фигуристов два фальшстарта )
Страницы: 1
Наверх