Извлечение 2-го слова из текста
nechehov
Дата: Понедельник, 04.12.2017, 16:53 |
Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 81
Репутация:
0
±
Замечаний:
0% ±
Excel 2016
Добрый день! С помощью какой формулы можно извлечь из текста 2-е слово, у которого может быть разное количество букв и стандартная формула ЛЕВСИМВ не подходит?
Добрый день! С помощью какой формулы можно извлечь из текста 2-е слово, у которого может быть разное количество букв и стандартная формула ЛЕВСИМВ не подходит? nechehov
Ответить
Сообщение Добрый день! С помощью какой формулы можно извлечь из текста 2-е слово, у которого может быть разное количество букв и стандартная формула ЛЕВСИМВ не подходит? Автор - nechehov Дата добавления - 04.12.2017 в 16:53
buchlotnik
Дата: Понедельник, 04.12.2017, 16:59 |
Сообщение № 2
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация:
929
±
Замечаний:
20% ±
2010, 2013, 2016 RUS / ENG
Код
=СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(A2;" ";ПОВТОР(" ";99));100;100))
Код
=СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(A2;" ";ПОВТОР(" ";99));100;100))
buchlotnik
Ответить
Сообщение Код
=СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(A2;" ";ПОВТОР(" ";99));100;100))
Автор - buchlotnik Дата добавления - 04.12.2017 в 16:59
Che79
Дата: Понедельник, 04.12.2017, 17:37 |
Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1649
Репутация:
306
±
Замечаний:
0% ±
2013 Win, 365 Mac
не оптимизировано вообще Код
{=СЖПРОБЕЛЫ(ПСТР(A2;ПОИСК(" ";A2)+1;ПОИСК("$";ПОДСТАВИТЬ(A2;" ";"$";2))-ПОИСК(" ";A2)-2*ИЛИ(ЕЧИСЛО(ПОИСК({",":";":".":";":":"};A2)))))}
- формула массива
не оптимизировано вообще Код
{=СЖПРОБЕЛЫ(ПСТР(A2;ПОИСК(" ";A2)+1;ПОИСК("$";ПОДСТАВИТЬ(A2;" ";"$";2))-ПОИСК(" ";A2)-2*ИЛИ(ЕЧИСЛО(ПОИСК({",":";":".":";":":"};A2)))))}
- формула массива Che79
Делай нормально и будет нормально!
Ответить
Сообщение не оптимизировано вообще Код
{=СЖПРОБЕЛЫ(ПСТР(A2;ПОИСК(" ";A2)+1;ПОИСК("$";ПОДСТАВИТЬ(A2;" ";"$";2))-ПОИСК(" ";A2)-2*ИЛИ(ЕЧИСЛО(ПОИСК({",":";":".":";":":"};A2)))))}
- формула массива Автор - Che79 Дата добавления - 04.12.2017 в 17:37
bmv98rus
Дата: Понедельник, 04.12.2017, 20:47 |
Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4106
Репутация:
768
±
Замечаний:
0% ±
Excel 2013/2016
Очень старый ресурс там Returning Any Word Or Words In A StringКод
=MID(A10,SMALL(IF(MID(" "&A10,ROW(INDIRECT("1:"&LEN(A10)+1)),1)=" ",ROW(INDIRECT("1:"&LEN(A10)+1))),B10),SUM(SMALL(IF(MID(" "&A10&" ",ROW(INDIRECT("1:"&LEN(A10)+2)),1)=" ",ROW(INDIRECT("1:"&LEN(A10)+2))),B10+C10*{0,1})*{-1,1})-1)
Длинно, но универсально.
Очень старый ресурс там Returning Any Word Or Words In A StringКод
=MID(A10,SMALL(IF(MID(" "&A10,ROW(INDIRECT("1:"&LEN(A10)+1)),1)=" ",ROW(INDIRECT("1:"&LEN(A10)+1))),B10),SUM(SMALL(IF(MID(" "&A10&" ",ROW(INDIRECT("1:"&LEN(A10)+2)),1)=" ",ROW(INDIRECT("1:"&LEN(A10)+2))),B10+C10*{0,1})*{-1,1})-1)
Длинно, но универсально. bmv98rus
Замечательный Временно просто медведь , процентов на 20 .
Сообщение отредактировал bmv98rus - Понедельник, 04.12.2017, 20:48
Ответить
Сообщение Очень старый ресурс там Returning Any Word Or Words In A StringКод
=MID(A10,SMALL(IF(MID(" "&A10,ROW(INDIRECT("1:"&LEN(A10)+1)),1)=" ",ROW(INDIRECT("1:"&LEN(A10)+1))),B10),SUM(SMALL(IF(MID(" "&A10&" ",ROW(INDIRECT("1:"&LEN(A10)+2)),1)=" ",ROW(INDIRECT("1:"&LEN(A10)+2))),B10+C10*{0,1})*{-1,1})-1)
Длинно, но универсально. Автор - bmv98rus Дата добавления - 04.12.2017 в 20:47
vikttur
Дата: Понедельник, 04.12.2017, 20:58 |
Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2941
Цитата
Длинно, но универсально.
... и тормознуто-летуче Автору темы: пример нужно показвать не абы-какой, а продумать возможные варианты. Если по показанному примеру, можно проще - брать сразу с 5-го символа (автор утверждает, что все тексты начинаются так - "100 ") А еще вопрос: запятая - часть слова или разделительный знак? Могут быть другие разделители?
Цитата
Длинно, но универсально.
... и тормознуто-летуче Автору темы: пример нужно показвать не абы-какой, а продумать возможные варианты. Если по показанному примеру, можно проще - брать сразу с 5-го символа (автор утверждает, что все тексты начинаются так - "100 ") А еще вопрос: запятая - часть слова или разделительный знак? Могут быть другие разделители?vikttur
Сообщение отредактировал vikttur - Понедельник, 04.12.2017, 21:17
Ответить
Сообщение Цитата
Длинно, но универсально.
... и тормознуто-летуче Автору темы: пример нужно показвать не абы-какой, а продумать возможные варианты. Если по показанному примеру, можно проще - брать сразу с 5-го символа (автор утверждает, что все тексты начинаются так - "100 ") А еще вопрос: запятая - часть слова или разделительный знак? Могут быть другие разделители?Автор - vikttur Дата добавления - 04.12.2017 в 20:58
buchlotnik
Дата: Понедельник, 04.12.2017, 21:04 |
Сообщение № 6
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация:
929
±
Замечаний:
20% ±
2010, 2013, 2016 RUS / ENG
[offtop]блин, народ - у нас тут МШ наоборот нарисовался? [/offtop]
[offtop]блин, народ - у нас тут МШ наоборот нарисовался? [/offtop] buchlotnik
Ответить
Сообщение [offtop]блин, народ - у нас тут МШ наоборот нарисовался? [/offtop] Автор - buchlotnik Дата добавления - 04.12.2017 в 21:04
bmv98rus
Дата: Понедельник, 04.12.2017, 21:23 |
Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4106
Репутация:
768
±
Замечаний:
0% ±
Excel 2013/2016
Это да. Правда порой нужно что-то посчитать разово и такие решения помогают. Тезка, переведите пож.
Это да. Правда порой нужно что-то посчитать разово и такие решения помогают. Тезка, переведите пож.bmv98rus
Замечательный Временно просто медведь , процентов на 20 .
Ответить
Сообщение Это да. Правда порой нужно что-то посчитать разово и такие решения помогают. Тезка, переведите пож.Автор - bmv98rus Дата добавления - 04.12.2017 в 21:23
vikttur
Дата: Понедельник, 04.12.2017, 21:35 |
Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2941
Сообщение отредактировал vikttur - Понедельник, 04.12.2017, 21:37
Ответить
Che79
Дата: Понедельник, 04.12.2017, 21:41 |
Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1649
Репутация:
306
±
Замечаний:
0% ±
2013 Win, 365 Mac
вот еще вариант, не особо , правда, думая над оптимизацией (в столбце С). Знаки препинания считает за часть слова. В зелёных ячейках накидал вариантов для проверки Код
=СЖПРОБЕЛЫ(ЛЕВБ(ПОДСТАВИТЬ(A2;ПСТР(A2;1;ПОИСК(" ";A2));"");ПОИСК(" ";ПОДСТАВИТЬ(A2;ПСТР(A2;1;ПОИСК(" ";A2));""))))
МШ - мозговой штурм Миша, (buchlotnik ), краткость - с.т.!
вот еще вариант, не особо , правда, думая над оптимизацией (в столбце С). Знаки препинания считает за часть слова. В зелёных ячейках накидал вариантов для проверки Код
=СЖПРОБЕЛЫ(ЛЕВБ(ПОДСТАВИТЬ(A2;ПСТР(A2;1;ПОИСК(" ";A2));"");ПОИСК(" ";ПОДСТАВИТЬ(A2;ПСТР(A2;1;ПОИСК(" ";A2));""))))
МШ - мозговой штурм Миша, (buchlotnik ), краткость - с.т.! Che79
Делай нормально и будет нормально!
Ответить
Сообщение вот еще вариант, не особо , правда, думая над оптимизацией (в столбце С). Знаки препинания считает за часть слова. В зелёных ячейках накидал вариантов для проверки Код
=СЖПРОБЕЛЫ(ЛЕВБ(ПОДСТАВИТЬ(A2;ПСТР(A2;1;ПОИСК(" ";A2));"");ПОИСК(" ";ПОДСТАВИТЬ(A2;ПСТР(A2;1;ПОИСК(" ";A2));""))))
МШ - мозговой штурм Миша, (buchlotnik ), краткость - с.т.! Автор - Che79 Дата добавления - 04.12.2017 в 21:41
sv2014
Дата: Вторник, 05.12.2017, 00:32 |
Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 226
Репутация:
61
±
Замечаний:
0% ±
Excel 2013
nechehov , добрый вечер,ещё вариант функции в столбце E [vba]Код
Function yyy$(t$) With CreateObject("VBScript.RegExp"): .Global = True: .IgnoreCase = True .Pattern = "(?:[^а-яё\w]|^)[а-яё\w]+(?=[^а-яё\w]|$)": yyy = .Execute(t)(1) End With End Function
[/vba]
nechehov , добрый вечер,ещё вариант функции в столбце E [vba]Код
Function yyy$(t$) With CreateObject("VBScript.RegExp"): .Global = True: .IgnoreCase = True .Pattern = "(?:[^а-яё\w]|^)[а-яё\w]+(?=[^а-яё\w]|$)": yyy = .Execute(t)(1) End With End Function
[/vba]sv2014
Ответить
Сообщение nechehov , добрый вечер,ещё вариант функции в столбце E [vba]Код
Function yyy$(t$) With CreateObject("VBScript.RegExp"): .Global = True: .IgnoreCase = True .Pattern = "(?:[^а-яё\w]|^)[а-яё\w]+(?=[^а-яё\w]|$)": yyy = .Execute(t)(1) End With End Function
[/vba]Автор - sv2014 Дата добавления - 05.12.2017 в 00:32
buchlotnik
Дата: Вторник, 05.12.2017, 00:38 |
Сообщение № 11
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация:
929
±
Замечаний:
20% ±
2010, 2013, 2016 RUS / ENG
Ну если регулярки, зачем такие сложности в паттерне? Код
=рег_извл(A2;"[^\s,\.]+";2)
[vba]Код
Function рег_извл(t$, p$, Optional n = 1) Application.Volatile With CreateObject("VBScript.RegExp") If n > 1 Then .Global = True .Pattern = p рег_извл = .Execute(t)(n - 1) End With End Function
[/vba]
Ну если регулярки, зачем такие сложности в паттерне? Код
=рег_извл(A2;"[^\s,\.]+";2)
[vba]Код
Function рег_извл(t$, p$, Optional n = 1) Application.Volatile With CreateObject("VBScript.RegExp") If n > 1 Then .Global = True .Pattern = p рег_извл = .Execute(t)(n - 1) End With End Function
[/vba] buchlotnik
Сообщение отредактировал buchlotnik - Вторник, 05.12.2017, 00:38
Ответить
Сообщение Ну если регулярки, зачем такие сложности в паттерне? Код
=рег_извл(A2;"[^\s,\.]+";2)
[vba]Код
Function рег_извл(t$, p$, Optional n = 1) Application.Volatile With CreateObject("VBScript.RegExp") If n > 1 Then .Global = True .Pattern = p рег_извл = .Execute(t)(n - 1) End With End Function
[/vba] Автор - buchlotnik Дата добавления - 05.12.2017 в 00:38
Wasilich
Дата: Вторник, 05.12.2017, 01:55 |
Сообщение № 12
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация:
326
±
Замечаний:
0% ±
2003
МШ И я вставлю.Код
=ЛЕВСИМВ(ЗАМЕНИТЬ(A2;1;НАЙТИ(" ";A2;1);"");НАЙТИ(" ";ЗАМЕНИТЬ(A2;1;НАЙТИ(" ";A2;1);"");1)-1)
[vba]Код
Sub tekst() Dim i&, tk$, ns& For I = 2 To Range("A" & Rows.Count).End(xlUp).Row tk = Mid(Cells(I, 1), InStr(Cells(I, 1), " ") + 1) ns = InStr(Mid(Cells(I, 1), InStr(Cells(I, 1), " ") + 1), " ") - 1 Cells(I, 3) = Mid(tk, 1, ns) Next End Sub
[/vba]
МШ И я вставлю.Код
=ЛЕВСИМВ(ЗАМЕНИТЬ(A2;1;НАЙТИ(" ";A2;1);"");НАЙТИ(" ";ЗАМЕНИТЬ(A2;1;НАЙТИ(" ";A2;1);"");1)-1)
[vba]Код
Sub tekst() Dim i&, tk$, ns& For I = 2 To Range("A" & Rows.Count).End(xlUp).Row tk = Mid(Cells(I, 1), InStr(Cells(I, 1), " ") + 1) ns = InStr(Mid(Cells(I, 1), InStr(Cells(I, 1), " ") + 1), " ") - 1 Cells(I, 3) = Mid(tk, 1, ns) Next End Sub
[/vba] Wasilich
Сообщение отредактировал Wasilich - Вторник, 05.12.2017, 02:02
Ответить
Сообщение МШ И я вставлю.Код
=ЛЕВСИМВ(ЗАМЕНИТЬ(A2;1;НАЙТИ(" ";A2;1);"");НАЙТИ(" ";ЗАМЕНИТЬ(A2;1;НАЙТИ(" ";A2;1);"");1)-1)
[vba]Код
Sub tekst() Dim i&, tk$, ns& For I = 2 To Range("A" & Rows.Count).End(xlUp).Row tk = Mid(Cells(I, 1), InStr(Cells(I, 1), " ") + 1) ns = InStr(Mid(Cells(I, 1), InStr(Cells(I, 1), " ") + 1), " ") - 1 Cells(I, 3) = Mid(tk, 1, ns) Next End Sub
[/vba] Автор - Wasilich Дата добавления - 05.12.2017 в 01:55
Светлый
Дата: Вторник, 05.12.2017, 06:55 |
Сообщение № 13
Группа: Друзья
Ранг: Старожил
Сообщений: 1829
Репутация:
510
±
Замечаний:
0% ±
Excel 2013, 2016
Ну и я свои пять копеек вставлю:Код
=ЛЕВБ(ЗАМЕНИТЬ(A2;1;ПОИСК(" ";A2);"");ПОИСК(" ";ЗАМЕНИТЬ(A2;1;ПОИСК(" ";A2);""))-1)
Код
=ПСТР(A2;ПОИСК(" ";A2)+1;ПОИСК("#";ПОДСТАВИТЬ(A2;" ";"#";2))-ПОИСК(" ";A2)-1)
Ну и я свои пять копеек вставлю:Код
=ЛЕВБ(ЗАМЕНИТЬ(A2;1;ПОИСК(" ";A2);"");ПОИСК(" ";ЗАМЕНИТЬ(A2;1;ПОИСК(" ";A2);""))-1)
Код
=ПСТР(A2;ПОИСК(" ";A2)+1;ПОИСК("#";ПОДСТАВИТЬ(A2;" ";"#";2))-ПОИСК(" ";A2)-1)
Светлый
Программировать проще, чем писать стихи.
Ответить
Сообщение Ну и я свои пять копеек вставлю:Код
=ЛЕВБ(ЗАМЕНИТЬ(A2;1;ПОИСК(" ";A2);"");ПОИСК(" ";ЗАМЕНИТЬ(A2;1;ПОИСК(" ";A2);""))-1)
Код
=ПСТР(A2;ПОИСК(" ";A2)+1;ПОИСК("#";ПОДСТАВИТЬ(A2;" ";"#";2))-ПОИСК(" ";A2)-1)
Автор - Светлый Дата добавления - 05.12.2017 в 06:55