Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Разделение текста на предложения из одной колонки в разные - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Разделение текста на предложения из одной колонки в разные (Формулы/Formulas)
Разделение текста на предложения из одной колонки в разные
atatat111 Дата: Четверг, 04.01.2018, 01:11 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Здравствуйте. Вопрос про разделение текста на предложения. Да, что есть много похожих тем, но они все немного не те, если я пропустил на форуме тему с решением этого вопроса или это умеет делать надстройка PLEX или другие надстройки, то подскажите, пожалуйста, ссылку на ответ.

Более менее понятно, как бы с текстом, который начинается с заглавной буквы и кончается точкой, можно сделать разделение по точке, но вот что делать, когда в одном предложении несколько точек. Может быть, как то можно задать условие разделять предложение по "точке пробел и потом любая заглавная буква" (". А"). Или может есть более продуманное решение, например волнует, что после точки может стоять цифра, цифра может стоять как в предложении и так и после предложения.

Пример текста.

Например он в колонке описание:
"Функция 12345. Выводит в ячейку статическое случайное число в заданном диапазоне. От встроенной функции СЛУЧМЕЖДУ отличается тем, что эта функция не пересчитывается каждый раз вместе с остальными функциями листа при изменении любой ячейки, т.е. сохраняет свое первоначальное значение."

Разделить на колонки по количеству предложений.

Колонка 2:
"Функция 12345"
Колонка 3:
"Выводит в ячейку статическое случайное число в заданном диапазоне"
Колонка 4:
"От встроенной функции СЛУЧМЕЖДУ отличается тем, что эта функция не пересчитывается каждый раз вместе с остальными функциями листа при изменении любой ячейки, т.е. сохраняет свое первоначальное значение"
 
Ответить
СообщениеЗдравствуйте. Вопрос про разделение текста на предложения. Да, что есть много похожих тем, но они все немного не те, если я пропустил на форуме тему с решением этого вопроса или это умеет делать надстройка PLEX или другие надстройки, то подскажите, пожалуйста, ссылку на ответ.

Более менее понятно, как бы с текстом, который начинается с заглавной буквы и кончается точкой, можно сделать разделение по точке, но вот что делать, когда в одном предложении несколько точек. Может быть, как то можно задать условие разделять предложение по "точке пробел и потом любая заглавная буква" (". А"). Или может есть более продуманное решение, например волнует, что после точки может стоять цифра, цифра может стоять как в предложении и так и после предложения.

Пример текста.

Например он в колонке описание:
"Функция 12345. Выводит в ячейку статическое случайное число в заданном диапазоне. От встроенной функции СЛУЧМЕЖДУ отличается тем, что эта функция не пересчитывается каждый раз вместе с остальными функциями листа при изменении любой ячейки, т.е. сохраняет свое первоначальное значение."

Разделить на колонки по количеству предложений.

Колонка 2:
"Функция 12345"
Колонка 3:
"Выводит в ячейку статическое случайное число в заданном диапазоне"
Колонка 4:
"От встроенной функции СЛУЧМЕЖДУ отличается тем, что эта функция не пересчитывается каждый раз вместе с остальными функциями листа при изменении любой ячейки, т.е. сохраняет свое первоначальное значение"

Автор - atatat111
Дата добавления - 04.01.2018 в 01:11
Che79 Дата: Четверг, 04.01.2018, 01:18 | Сообщение № 2
Группа: Проверенные
Ранг: Старожил
Сообщений: 1269
Репутация: 226 ±
Замечаний: 0% ±

Excel 2007, 2013


Делай нормально и будет нормально!
 
Ответить
СообщениеКросс на Планете

Автор - Che79
Дата добавления - 04.01.2018 в 01:18
bmv98rus Дата: Четверг, 04.01.2018, 01:28 | Сообщение № 3
Группа: Проверенные
Ранг: Старожил
Сообщений: 1261
Репутация: 214 ±
Замечаний: 0% ±

Excel 2013/2016
Che79, планетарный кросс :-)
 
Ответить
СообщениеChe79, планетарный кросс :-)

Автор - bmv98rus
Дата добавления - 04.01.2018 в 01:28
Gustav Дата: Четверг, 04.01.2018, 03:38 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1606
Репутация: 641 ±
Замечаний: 0% ±

начинал с Excel 4.0...
Можно начать решение задачи, например, с помощью простейшей пользовательской функции (UDF):
[vba]
Код
Function splitTo3parts(ByVal strSource)
    splitTo3parts = Split(Replace(strSource, ". ", ".~", , 2), "~")
End Function
[/vba]И дальше вводим формулу массива с этой UDF в три соседние ячейки одной строки. Например, исходная строка в ячейке A2. Тогда выделяем диапазон B2:D2, вводим формулу:
Код
=splitTo3parts(A2)
и жмём Ctrl+Shift+Enter. При протягивании вниз также сначала выделяем эти три "неделимые" ячейки и тянем все три за правый нижний угол ячейки D2.

Когда все ячейки с формулами рассчитаются, наверное, имеет смысл превратить их в "только значения" специальной вставкой.

Почему выше я написал "НАЧАТЬ решение задачи"? Потому, что, скорее всего, в некоторых случаях возникнут еще какие-то нюансы, которые придется либо разбирать вручную, либо сочинять еще какой-то алгоритм, предварительно исключив из рассмотрения те строки, в которых результаты первичной обработки с помощью UDF уже устраивают.
К сообщению приложен файл: split3.xlsm(15.0 Kb)


Мой tip box - яд 41001663842605

Сообщение отредактировал Gustav - Четверг, 04.01.2018, 03:41
 
Ответить
СообщениеМожно начать решение задачи, например, с помощью простейшей пользовательской функции (UDF):
[vba]
Код
Function splitTo3parts(ByVal strSource)
    splitTo3parts = Split(Replace(strSource, ". ", ".~", , 2), "~")
End Function
[/vba]И дальше вводим формулу массива с этой UDF в три соседние ячейки одной строки. Например, исходная строка в ячейке A2. Тогда выделяем диапазон B2:D2, вводим формулу:
Код
=splitTo3parts(A2)
и жмём Ctrl+Shift+Enter. При протягивании вниз также сначала выделяем эти три "неделимые" ячейки и тянем все три за правый нижний угол ячейки D2.

Когда все ячейки с формулами рассчитаются, наверное, имеет смысл превратить их в "только значения" специальной вставкой.

Почему выше я написал "НАЧАТЬ решение задачи"? Потому, что, скорее всего, в некоторых случаях возникнут еще какие-то нюансы, которые придется либо разбирать вручную, либо сочинять еще какой-то алгоритм, предварительно исключив из рассмотрения те строки, в которых результаты первичной обработки с помощью UDF уже устраивают.

Автор - Gustav
Дата добавления - 04.01.2018 в 03:38
китин Дата: Четверг, 04.01.2018, 10:41 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4924
Репутация: 786 ±
Замечаний: 0% ±

Excel 2007;Excel 2010
а вот чисто по приведенному "примеру". (Спасибо Косте Gustav, за труд по созданию примера :D )
типа разминки
часть 1
Код
=ПСТР(A2;1;ПОИСК(".";A2)-1)

часть 2
Код
=ПСТР(ПОДСТАВИТЬ(A2;ПСТР(A2;1;ПОИСК(".";A2));"");1;ПОИСК(".";ПОДСТАВИТЬ(A2;ПСТР(A2;1;ПОИСК(".";A2));""))-1)

часть 3
Код
=ПСТР(A2;ПОИСК(".";A2;ПОИСК(".";A2)+1)+1;ДЛСТР(A2))
К сообщению приложен файл: split3_33.xlsx(9.8 Kb)


Не судите строго:я пытаюсь научиться
ЯД 41001877306852/WM R249698041931; Z239672726538
 
Ответить
Сообщениеа вот чисто по приведенному "примеру". (Спасибо Косте Gustav, за труд по созданию примера :D )
типа разминки
часть 1
Код
=ПСТР(A2;1;ПОИСК(".";A2)-1)

часть 2
Код
=ПСТР(ПОДСТАВИТЬ(A2;ПСТР(A2;1;ПОИСК(".";A2));"");1;ПОИСК(".";ПОДСТАВИТЬ(A2;ПСТР(A2;1;ПОИСК(".";A2));""))-1)

часть 3
Код
=ПСТР(A2;ПОИСК(".";A2;ПОИСК(".";A2)+1)+1;ДЛСТР(A2))

Автор - китин
Дата добавления - 04.01.2018 в 10:41
atatat111 Дата: Четверг, 04.01.2018, 11:18 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Gustav, китин, Благодарю за ответы! Я прошу прощения, я не совсем точно написал.
Таких строк с текстом может быть например ~100, в каждой строке текст, в котором разное количество предложений (в которых могут быть знаки "!,?" любые короче), от одного предложения и до бесконечности, ну точнее наверное не больше ~30-40 предложений.

Gustav, Посмотрев вашу формулу, пришла мысль, а можно ли указать такое условие? Например когда строчные буквы после точки ". абвгдеёжз...эюя" - не делать разделения предложения, а когда заглавная буква после точки делать разделение ". АБВГДЕЁЖЗ...ЭЮЯ".

китин, Ваш вариант работает просто идеально, но только для текстового примера, а если вставить другой текст с другими количеством предложений и знаками, к сожалению, как я понял перестает работать.
К сообщению приложен файл: 6035998.xlsx(9.1 Kb)


Сообщение отредактировал atatat111 - Четверг, 04.01.2018, 11:24
 
Ответить
СообщениеGustav, китин, Благодарю за ответы! Я прошу прощения, я не совсем точно написал.
Таких строк с текстом может быть например ~100, в каждой строке текст, в котором разное количество предложений (в которых могут быть знаки "!,?" любые короче), от одного предложения и до бесконечности, ну точнее наверное не больше ~30-40 предложений.

Gustav, Посмотрев вашу формулу, пришла мысль, а можно ли указать такое условие? Например когда строчные буквы после точки ". абвгдеёжз...эюя" - не делать разделения предложения, а когда заглавная буква после точки делать разделение ". АБВГДЕЁЖЗ...ЭЮЯ".

китин, Ваш вариант работает просто идеально, но только для текстового примера, а если вставить другой текст с другими количеством предложений и знаками, к сожалению, как я понял перестает работать.

Автор - atatat111
Дата добавления - 04.01.2018 в 11:18
китин Дата: Четверг, 04.01.2018, 11:22 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4924
Репутация: 786 ±
Замечаний: 0% ±

Excel 2007;Excel 2010
atatat111, я же вам написал:

чисто по приведенному "примеру".

и "пример" поставил в кавычки, так как никакого примера у вас нетути :'(
и писал формулы только для утренней разминки мозгов. :D
если хотите правильного решения, то приложите СВОЙ файл пример со всеми возможными вариантами.


Не судите строго:я пытаюсь научиться
ЯД 41001877306852/WM R249698041931; Z239672726538
 
Ответить
Сообщениеatatat111, я же вам написал:

чисто по приведенному "примеру".

и "пример" поставил в кавычки, так как никакого примера у вас нетути :'(
и писал формулы только для утренней разминки мозгов. :D
если хотите правильного решения, то приложите СВОЙ файл пример со всеми возможными вариантами.

Автор - китин
Дата добавления - 04.01.2018 в 11:22
atatat111 Дата: Четверг, 04.01.2018, 11:26 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
китин, извините, только хотел прикрепить пример, но не успел. В пример, просто вставил случайные наши с вами ответы из этой темы.
К сообщению приложен файл: 1683791.xlsx(9.1 Kb)
 
Ответить
Сообщениекитин, извините, только хотел прикрепить пример, но не успел. В пример, просто вставил случайные наши с вами ответы из этой темы.

Автор - atatat111
Дата добавления - 04.01.2018 в 11:26
Gustav Дата: Четверг, 04.01.2018, 15:35 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1606
Репутация: 641 ±
Замечаний: 0% ±

начинал с Excel 4.0...
пришла мысль, а можно ли указать такое условие? Например когда строчные буквы после точки ". абвгдеёжз...эюя" - не делать разделения предложения, а когда заглавная буква после точки делать разделение ". АБВГДЕЁЖЗ...ЭЮЯ".

Можно. Правда, функция заметно усложнится. Новая ее версия - с использованием механизма регулярных выражений:
[vba]
Код
Function splitTo3parts(ByVal strSource)
    Dim objRegExp   As Object 'RegExp
    Dim colMatches  As Object 'MatchCollection
    
    Set objRegExp = CreateObject("VBScript.RegExp")
    
    objRegExp.Global = True
    objRegExp.Pattern = "\.\s[A-ZА-Я]" 'точка пробел ЗаглавнаяБуква
    
    Set colMatches = objRegExp.Execute(strSource)

    If colMatches.Count > 0 Then Mid(strSource, colMatches(0).FirstIndex + 2) = "~"
    If colMatches.Count > 1 Then Mid(strSource, colMatches(1).FirstIndex + 2) = "~"

    splitTo3parts = Split(strSource & String(2 - WorksheetFunction.Min(colMatches.Count, 2), "~"), "~", 3)
End Function
[/vba]
Заковыристая последняя строка функции нужна для того, чтобы всегда возвращать массив из трёх элементов. Если разделителей не найдено, то начальный элемент массива содержит всю исходную строку, а два других элемента - пустые строки. Если разделитель только один, то последний элемент массива будет также пустой строкой. Таким образом мы боремся с возможными ошибками типа "#H/Д" или значениями 0 при пустой исходной строке. Ну, а первый параметр функции повтора String не может быть отрицательным числом, поэтому применяем функцию Min.


Мой tip box - яд 41001663842605

Сообщение отредактировал Gustav - Четверг, 04.01.2018, 16:34
 
Ответить
Сообщение
пришла мысль, а можно ли указать такое условие? Например когда строчные буквы после точки ". абвгдеёжз...эюя" - не делать разделения предложения, а когда заглавная буква после точки делать разделение ". АБВГДЕЁЖЗ...ЭЮЯ".

Можно. Правда, функция заметно усложнится. Новая ее версия - с использованием механизма регулярных выражений:
[vba]
Код
Function splitTo3parts(ByVal strSource)
    Dim objRegExp   As Object 'RegExp
    Dim colMatches  As Object 'MatchCollection
    
    Set objRegExp = CreateObject("VBScript.RegExp")
    
    objRegExp.Global = True
    objRegExp.Pattern = "\.\s[A-ZА-Я]" 'точка пробел ЗаглавнаяБуква
    
    Set colMatches = objRegExp.Execute(strSource)

    If colMatches.Count > 0 Then Mid(strSource, colMatches(0).FirstIndex + 2) = "~"
    If colMatches.Count > 1 Then Mid(strSource, colMatches(1).FirstIndex + 2) = "~"

    splitTo3parts = Split(strSource & String(2 - WorksheetFunction.Min(colMatches.Count, 2), "~"), "~", 3)
End Function
[/vba]
Заковыристая последняя строка функции нужна для того, чтобы всегда возвращать массив из трёх элементов. Если разделителей не найдено, то начальный элемент массива содержит всю исходную строку, а два других элемента - пустые строки. Если разделитель только один, то последний элемент массива будет также пустой строкой. Таким образом мы боремся с возможными ошибками типа "#H/Д" или значениями 0 при пустой исходной строке. Ну, а первый параметр функции повтора String не может быть отрицательным числом, поэтому применяем функцию Min.

Автор - Gustav
Дата добавления - 04.01.2018 в 15:35
SLAVICK Дата: Четверг, 04.01.2018, 17:04 | Сообщение № 10
Группа: Модераторы
Ранг: Старожил
Сообщений: 2243
Репутация: 744 ±
Замечаний: 0% ±

2007,2010,2013,2016
Таких строк с текстом может быть например ~100, в каждой строке текст, в котором разное количество предложений (в которых могут быть знаки "!,?" любые короче)

у меня так получилось:
[vba]
Код
Function Split_by_sentence(ByVal StringInp As String, Optional ByVal Patt As String = "([\.|\?|\!]+\s+[A-ZÀ-ß])")
    Dim i&, arr() As String
    With CreateObject("Vbscript.regexp")
        .Pattern = Patt
        .Global = True
        If Not .test(StringInp) Then
            ReDim arr(0)
            arr(0) = StringInp
        Else
            Set Matches = .Execute(StringInp)
            ReDim arr(Matches.Count)
             For i = 0 To Matches.Count - 1
                    If i = 0 Then
                        arr(i) = Left(StringInp, Matches(i).FirstIndex + Len(Matches(i).submatches(0)) - 1)
                    Else
                        arr(i) = Mid(StringInp, Matches(i - 1).FirstIndex + Matches(i - 1).Length - 1, Matches(i).FirstIndex - Matches(i - 1).FirstIndex - Matches(i - 1).Length + Matches(i).Length)
                    End If
                    arr(i) = Trim(arr(i))
            Next
            arr(i) = Mid(StringInp, Matches(i - 1).FirstIndex + Matches(i - 1).Length - 1, 999)
            arr(i) = Trim(arr(i))
        End If
    End With
    
    If Application.Caller.Cells.Count > UBound(arr) + 1 Then ReDim Preserve arr(Application.Caller.Cells.Count)
    Split_by_sentence = arr
End Function
[/vba]
К сообщению приложен файл: 1683791-1-.xlsm(21.4 Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
Таких строк с текстом может быть например ~100, в каждой строке текст, в котором разное количество предложений (в которых могут быть знаки "!,?" любые короче)

у меня так получилось:
[vba]
Код
Function Split_by_sentence(ByVal StringInp As String, Optional ByVal Patt As String = "([\.|\?|\!]+\s+[A-ZÀ-ß])")
    Dim i&, arr() As String
    With CreateObject("Vbscript.regexp")
        .Pattern = Patt
        .Global = True
        If Not .test(StringInp) Then
            ReDim arr(0)
            arr(0) = StringInp
        Else
            Set Matches = .Execute(StringInp)
            ReDim arr(Matches.Count)
             For i = 0 To Matches.Count - 1
                    If i = 0 Then
                        arr(i) = Left(StringInp, Matches(i).FirstIndex + Len(Matches(i).submatches(0)) - 1)
                    Else
                        arr(i) = Mid(StringInp, Matches(i - 1).FirstIndex + Matches(i - 1).Length - 1, Matches(i).FirstIndex - Matches(i - 1).FirstIndex - Matches(i - 1).Length + Matches(i).Length)
                    End If
                    arr(i) = Trim(arr(i))
            Next
            arr(i) = Mid(StringInp, Matches(i - 1).FirstIndex + Matches(i - 1).Length - 1, 999)
            arr(i) = Trim(arr(i))
        End If
    End With
    
    If Application.Caller.Cells.Count > UBound(arr) + 1 Then ReDim Preserve arr(Application.Caller.Cells.Count)
    Split_by_sentence = arr
End Function
[/vba]

Автор - SLAVICK
Дата добавления - 04.01.2018 в 17:04
bmv98rus Дата: Четверг, 04.01.2018, 17:23 | Сообщение № 11
Группа: Проверенные
Ранг: Старожил
Сообщений: 1261
Репутация: 214 ±
Замечаний: 0% ±

Excel 2013/2016
Gustav, SLAVICK, может и учли, если так, то хорошо, я код не изучал и в регулярках слаб, но после точки(? ! могут быть излишества всякие, типа перевода строк и возвратов корретки, как до пробела, так и после нескольких.
 
Ответить
СообщениеGustav, SLAVICK, может и учли, если так, то хорошо, я код не изучал и в регулярках слаб, но после точки(? ! могут быть излишества всякие, типа перевода строк и возвратов корретки, как до пробела, так и после нескольких.

Автор - bmv98rus
Дата добавления - 04.01.2018 в 17:23
atatat111 Дата: Четверг, 04.01.2018, 17:28 | Сообщение № 12
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Gustav, SLAVICK, Последняя версия работает идеально! Вставил для примера текст с этого форму из этой темы http://www.excelworld.ru/forum/13-5074-51887-16-1372997684.
Там написан так текст, что в конце предложения нет точки, но есть перенос строки, можно ли ещё указать в этом выражении, перенос строки как окончание предложения, чтобы точно так же, как предложение сточкой, вы водил в столбец? В таблице пометил где переносы строк словом "ЗДЕСЬ".
К сообщению приложен файл: 0956504.xlsm(19.6 Kb)
 
Ответить
СообщениеGustav, SLAVICK, Последняя версия работает идеально! Вставил для примера текст с этого форму из этой темы http://www.excelworld.ru/forum/13-5074-51887-16-1372997684.
Там написан так текст, что в конце предложения нет точки, но есть перенос строки, можно ли ещё указать в этом выражении, перенос строки как окончание предложения, чтобы точно так же, как предложение сточкой, вы водил в столбец? В таблице пометил где переносы строк словом "ЗДЕСЬ".

Автор - atatat111
Дата добавления - 04.01.2018 в 17:28
atatat111 Дата: Четверг, 04.01.2018, 17:34 | Сообщение № 13
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
bmv98rus, Пока тут я про это строчил - вы как раз написали про это же, но более продуманно, чем я.
 
Ответить
Сообщениеbmv98rus, Пока тут я про это строчил - вы как раз написали про это же, но более продуманно, чем я.

Автор - atatat111
Дата добавления - 04.01.2018 в 17:34
SLAVICK Дата: Четверг, 04.01.2018, 18:05 | Сообщение № 14
Группа: Модераторы
Ранг: Старожил
Сообщений: 2243
Репутация: 744 ±
Замечаний: 0% ±

2007,2010,2013,2016
перенос строки как окончание предложения, чтобы точно так же, как предложение сточкой,

Для этого достаточно немного поменять регулярку из:
[vba]
Код
[\.|\?|\!]+\s+[A-ZА-Я]
[/vba]
на
[vba]
Код
[\.|\?|\!|\n]+(\s+)?[A-ZА-Я]
[/vba]

Дополнил:
чтобы из текста удалить переносы строк и др. непечатаемые символы можно использовать:
Код
=ПЕЧСИМВ()

см. Файл2
К сообщению приложен файл: 6970196.xlsm(19.8 Kb) · 6970196-1-.xlsm(19.8 Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
перенос строки как окончание предложения, чтобы точно так же, как предложение сточкой,

Для этого достаточно немного поменять регулярку из:
[vba]
Код
[\.|\?|\!]+\s+[A-ZА-Я]
[/vba]
на
[vba]
Код
[\.|\?|\!|\n]+(\s+)?[A-ZА-Я]
[/vba]

Дополнил:
чтобы из текста удалить переносы строк и др. непечатаемые символы можно использовать:
Код
=ПЕЧСИМВ()

см. Файл2

Автор - SLAVICK
Дата добавления - 04.01.2018 в 18:05
atatat111 Дата: Четверг, 04.01.2018, 18:59 | Сообщение № 15
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
SLAVICK, Спасибо распознает предложения отлично! А можно добавить в выражение исключения, когда не нужно разделять предложение? Например "пробел-точка-г" - " .г" г. - это город. Это как бы только один пример, остальные исключения я сам вставлю в выражение.
 
Ответить
СообщениеSLAVICK, Спасибо распознает предложения отлично! А можно добавить в выражение исключения, когда не нужно разделять предложение? Например "пробел-точка-г" - " .г" г. - это город. Это как бы только один пример, остальные исключения я сам вставлю в выражение.

Автор - atatat111
Дата добавления - 04.01.2018 в 18:59
bmv98rus Дата: Четверг, 04.01.2018, 19:45 | Сообщение № 16
Группа: Проверенные
Ранг: Старожил
Сообщений: 1261
Репутация: 214 ±
Замечаний: 0% ±

Excel 2013/2016
чтобы из текста удалить переносы строк и др. непечатаемые символы можно использовать:

А какже всеми "любимый" неразрывный пробел, его ни Clean, не Trim не возьмет. :-)
 
Ответить
Сообщение
чтобы из текста удалить переносы строк и др. непечатаемые символы можно использовать:

А какже всеми "любимый" неразрывный пробел, его ни Clean, не Trim не возьмет. :-)

Автор - bmv98rus
Дата добавления - 04.01.2018 в 19:45
Gustav Дата: Четверг, 04.01.2018, 20:21 | Сообщение № 17
Группа: Друзья
Ранг: Старожил
Сообщений: 1606
Репутация: 641 ±
Замечаний: 0% ±

начинал с Excel 4.0...
какже всеми "любимый" неразрывный пробел

Реплэйсом его, реплэйсом - к обычному. Вообще, считаю, что это всё - забота топикстартера, а именно - подать функции текст, предварительно очищенный от подобных "нюансов". Сказано в ТЗ "точка-пробел-Заглавная" - вот и получите-распишитесь! Или - новое ТЗ по результатам обсуждения.

Кстати, "\s" учитывает не только собственно пробел, но и другие пробельные символы типа табуляции и перевода строки (неразрывной - нет).


Мой tip box - яд 41001663842605

Сообщение отредактировал Gustav - Четверг, 04.01.2018, 20:21
 
Ответить
Сообщение
какже всеми "любимый" неразрывный пробел

Реплэйсом его, реплэйсом - к обычному. Вообще, считаю, что это всё - забота топикстартера, а именно - подать функции текст, предварительно очищенный от подобных "нюансов". Сказано в ТЗ "точка-пробел-Заглавная" - вот и получите-распишитесь! Или - новое ТЗ по результатам обсуждения.

Кстати, "\s" учитывает не только собственно пробел, но и другие пробельные символы типа табуляции и перевода строки (неразрывной - нет).

Автор - Gustav
Дата добавления - 04.01.2018 в 20:21
bmv98rus Дата: Четверг, 04.01.2018, 21:29 | Сообщение № 18
Группа: Проверенные
Ранг: Старожил
Сообщений: 1261
Репутация: 214 ±
Замечаний: 0% ±

Excel 2013/2016
Gustav, с одной стороны согласен, а с другой, ТС понятия может не иметь о существовании таких подводных камней.

Попробовал воспользоваться встроенными средствами Word
[vba]
Код
Selection.MoveRight Unit:=wdSentence, Count:=1
[/vba]
Не справился он с примером.:-) на этом осекся - знаки "!,?" . естесвенно "Маша вышла, т.е. Маша ушла." стало двумя предложениями. И даже это "Мама вышла, т.е. мама ушла." тоже.
 
Ответить
СообщениеGustav, с одной стороны согласен, а с другой, ТС понятия может не иметь о существовании таких подводных камней.

Попробовал воспользоваться встроенными средствами Word
[vba]
Код
Selection.MoveRight Unit:=wdSentence, Count:=1
[/vba]
Не справился он с примером.:-) на этом осекся - знаки "!,?" . естесвенно "Маша вышла, т.е. Маша ушла." стало двумя предложениями. И даже это "Мама вышла, т.е. мама ушла." тоже.

Автор - bmv98rus
Дата добавления - 04.01.2018 в 21:29
Gustav Дата: Четверг, 04.01.2018, 23:43 | Сообщение № 19
Группа: Друзья
Ранг: Старожил
Сообщений: 1606
Репутация: 641 ±
Замечаний: 0% ±

начинал с Excel 4.0...
Ну вот, вроде, учёл все высказанные пожелания, а также представляю, если что, куда надо будет вставить следующие хотелки.



Мой tip box - яд 41001663842605
 
Ответить
СообщениеНу вот, вроде, учёл все высказанные пожелания, а также представляю, если что, куда надо будет вставить следующие хотелки.


Автор - Gustav
Дата добавления - 04.01.2018 в 23:43
atatat111 Дата: Пятница, 05.01.2018, 12:20 | Сообщение № 20
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Gustav, Благодарю! Один только вопрос, как изменить количество колонок, на которые делятся предложения? Сейчас на 3 колонки делятся, в остальных написано "Н/Д", попробовал сам изменить Ваше выражение, но не получилось.
 
Ответить
СообщениеGustav, Благодарю! Один только вопрос, как изменить количество колонок, на которые делятся предложения? Сейчас на 3 колонки делятся, в остальных написано "Н/Д", попробовал сам изменить Ваше выражение, но не получилось.

Автор - atatat111
Дата добавления - 05.01.2018 в 12:20
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Разделение текста на предложения из одной колонки в разные (Формулы/Formulas)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс цитирования
© 2010-2018 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!