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

 

= Мир MS Excel/Обрезка текста по словам без учета знаков препинания - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Обрезка текста по словам без учета знаков препинания
mult Дата: Воскресенье, 10.01.2021, 13:35 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
Приветствую ребят, запарился с проблемой, не могу сформировать формулу, мож кто поможет
Есть формула:
=ЛЕВБ(AD2;ПРОСМОТР(81;ПОИСК(" ";AD2&" ";СТРОКА($1:$81)))-1)

Нужно чтобы текст обрезался по словам с знаком препинания до обрезаемого слова и после, обязательное условие: при обрезании текста должно учитываться только количество букв (т. е. количество знаков препинания не должно учитываться во всей строке)

ПРИМЕР:
Исходник 111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 1111111111, 90 ОШИБКА!
Проблема 111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 69 ОК
Нужный результат 111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 111111111 79 ОК ОБРЕЗАНО: (, 1111111111,)
Подсчет количества символов произведен без учета запятых, а обрезка происходи с учетом запятых, а нужно без учета запятых
К сообщению приложен файл: 3849008.xlsx (9.1 Kb)
 
Ответить
СообщениеПриветствую ребят, запарился с проблемой, не могу сформировать формулу, мож кто поможет
Есть формула:
=ЛЕВБ(AD2;ПРОСМОТР(81;ПОИСК(" ";AD2&" ";СТРОКА($1:$81)))-1)

Нужно чтобы текст обрезался по словам с знаком препинания до обрезаемого слова и после, обязательное условие: при обрезании текста должно учитываться только количество букв (т. е. количество знаков препинания не должно учитываться во всей строке)

ПРИМЕР:
Исходник 111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 1111111111, 90 ОШИБКА!
Проблема 111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 69 ОК
Нужный результат 111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 111111111, 111111111 79 ОК ОБРЕЗАНО: (, 1111111111,)
Подсчет количества символов произведен без учета запятых, а обрезка происходи с учетом запятых, а нужно без учета запятых

Автор - mult
Дата добавления - 10.01.2021 в 13:35
bmv98rus Дата: Воскресенье, 10.01.2021, 14:27 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4147
Репутация: 772 ±
Замечаний: 0% ±

Excel 2013/2016
=ПОДСТАВИТЬ(ЛЕВБ(ПОДСТАВИТЬ(B1;",";);ПРОСМОТР(81;ПОИСК(" ";ПОДСТАВИТЬ(B1;",";)&" ";СТРОКА($1:$81)))-1);" ";", ")

или задачу формулируйте более корректно.


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Воскресенье, 10.01.2021, 14:28
 
Ответить
Сообщение
=ПОДСТАВИТЬ(ЛЕВБ(ПОДСТАВИТЬ(B1;",";);ПРОСМОТР(81;ПОИСК(" ";ПОДСТАВИТЬ(B1;",";)&" ";СТРОКА($1:$81)))-1);" ";", ")

или задачу формулируйте более корректно.

Автор - bmv98rus
Дата добавления - 10.01.2021 в 14:27
mult Дата: Воскресенье, 10.01.2021, 17:03 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
Не то получается, по сути удалилась только последняя запятая, это легко можно сделать в моей формуле, а кроме всего, после каждого слова появилась запятая, где ее не было )

Мне требуется, чтобы обрезание происходило исходя из количества символов (букв или цифр), но при этом, в предложении есть знаки препинания, которые не должны учитываться при расчете символов при обрезании по словам
Кроме этого, нужно, чтобы обрезаемое слово (-ва), обрезалось с запятой до слова и после его, т.е. в конце предложения не висела запятая

ОБРЕЗАНО: , 1111111111, в примере указал, что должно быть обрезано от исходника

Алгоритм должен понимать, что 1111111111, тут не 11 символов, а 10, без учета запятой


Сообщение отредактировал mult - Воскресенье, 10.01.2021, 17:52
 
Ответить
СообщениеНе то получается, по сути удалилась только последняя запятая, это легко можно сделать в моей формуле, а кроме всего, после каждого слова появилась запятая, где ее не было )

Мне требуется, чтобы обрезание происходило исходя из количества символов (букв или цифр), но при этом, в предложении есть знаки препинания, которые не должны учитываться при расчете символов при обрезании по словам
Кроме этого, нужно, чтобы обрезаемое слово (-ва), обрезалось с запятой до слова и после его, т.е. в конце предложения не висела запятая

ОБРЕЗАНО: , 1111111111, в примере указал, что должно быть обрезано от исходника

Алгоритм должен понимать, что 1111111111, тут не 11 символов, а 10, без учета запятой

Автор - mult
Дата добавления - 10.01.2021 в 17:03
mult Дата: Воскресенье, 10.01.2021, 17:31 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
Приведу еще пример
111111111,,,,,_222222222,,,,,,,,_3333333333, (_ - это я отметил пробел)
Алгоритм должен посчитать выделенное красным, пробелы учитываются как символ
Обрезка должна произойти до 19 символов 111111111_222222222
Итог должен быть 111111111,,,,,_222222222 - т.е. знаки препинания в алгоритме не учитываются
 
Ответить
СообщениеПриведу еще пример
111111111,,,,,_222222222,,,,,,,,_3333333333, (_ - это я отметил пробел)
Алгоритм должен посчитать выделенное красным, пробелы учитываются как символ
Обрезка должна произойти до 19 символов 111111111_222222222
Итог должен быть 111111111,,,,,_222222222 - т.е. знаки препинания в алгоритме не учитываются

Автор - mult
Дата добавления - 10.01.2021 в 17:31
bmv98rus Дата: Воскресенье, 10.01.2021, 18:04 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4147
Репутация: 772 ±
Замечаний: 0% ±

Excel 2013/2016
Цитата bmv98rus, 10.01.2021 в 14:27, в сообщении № 2 ( писал(а)):
или задачу формулируйте более корректно.

это как раз относилось к тому, что нужен нормальный пример и задача.
Что нужно? Знак препинания - это только запятая?


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Воскресенье, 10.01.2021, 18:42
 
Ответить
Сообщение
Цитата bmv98rus, 10.01.2021 в 14:27, в сообщении № 2 ( писал(а)):
или задачу формулируйте более корректно.

это как раз относилось к тому, что нужен нормальный пример и задача.
Что нужно? Знак препинания - это только запятая?

Автор - bmv98rus
Дата добавления - 10.01.2021 в 18:04
Gustav Дата: Воскресенье, 10.01.2021, 23:01 | Сообщение № 6
Группа: Админы
Ранг: Участник клуба
Сообщений: 2843
Репутация: 1194 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Похоже, что пользовательская функция (UDF) здесь лучший выход, без лишней головной боли:

Function NOPREPINAKI(str, maxLen)
    Dim ar, i, sm, smp, smz, smzp, result
    ar = Split(str, " ")
    For i = LBound(ar) To UBound(ar)
        sm = sm + Len(Replace(Replace(Replace(Replace(Replace(Replace(ar(i), _
                    ":", ""), ";", ""), ",", ""), ".", ""), "!", ""), "?", "")) _
                + IIf(i > LBound(ar), 1, 0)
        smz = smz + Len(ar(i)) + IIf(i > LBound(ar), 1, 0)
        If sm > maxLen Then Exit For
        smp = sm: smzp = smz
    Next i
    result = StrReverse(Left(str, smzp))
    For i = 1 To Len(result)
        If InStr(":;,.!?", Mid(result, i, 1)) = 0 Then
            result = StrReverse(Mid(result, i))
            Exit For
        End If
    Next i
    NOPREPINAKI = result
End Function

К сообщению приложен файл: Prepinaki.xlsm (16.4 Kb)


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеПохоже, что пользовательская функция (UDF) здесь лучший выход, без лишней головной боли:
[vba]
Function NOPREPINAKI(str, maxLen)    Dim ar, i, sm, smp, smz, smzp, result    ar = Split(str, " ")    For i = LBound(ar) To UBound(ar)        sm = sm + Len(Replace(Replace(Replace(Replace(Replace(Replace(ar(i), _                      ":", ""), ";", ""), ",", ""), ".", ""), "!", ""), "?", "")) _                + IIf(i > LBound(ar), 1, 0)        smz = smz + Len(ar(i)) + IIf(i > LBound(ar), 1, 0)        If sm > maxLen Then Exit For        smp = sm: smzp = smz    Next i    result = StrReverse(Left(str, smzp))    For i = 1 To Len(result)        If InStr(":;,.!?", Mid(result, i, 1)) = 0 Then            result = StrReverse(Mid(result, i))            Exit For        End If    Next i    NOPREPINAKI = resultEnd Function
[/vba]

Автор - Gustav
Дата добавления - 10.01.2021 в 23:01
mult Дата: Понедельник, 11.01.2021, 00:17 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
или задачу формулируйте более корректно.

это как раз относилось к тому, что нужен нормальный пример и задача.
Что нужно? Знак препинания - это только запятая?

Знак препинания может быть любым, но меня интересует запятая

Еще как-то подробнее объяснить, что мне нужно?


Сообщение отредактировал mult - Понедельник, 11.01.2021, 00:20
 
Ответить
Сообщениеили задачу формулируйте более корректно.

это как раз относилось к тому, что нужен нормальный пример и задача.
Что нужно? Знак препинания - это только запятая?

Знак препинания может быть любым, но меня интересует запятая

Еще как-то подробнее объяснить, что мне нужно?

Автор - mult
Дата добавления - 11.01.2021 в 00:17
mult Дата: Понедельник, 11.01.2021, 00:24 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
Излишнее цитирование удалено администрацией - это нарушение п.5j Правил форума

За ранее благодарен, но как ее применить? в приложенном файле
К сообщению приложен файл: 8704916.jpg (14.9 Kb)


Сообщение отредактировал китин - Понедельник, 11.01.2021, 11:11
 
Ответить
СообщениеИзлишнее цитирование удалено администрацией - это нарушение п.5j Правил форума

За ранее благодарен, но как ее применить? в приложенном файле

Автор - mult
Дата добавления - 11.01.2021 в 00:24
Gustav Дата: Понедельник, 11.01.2021, 02:41 | Сообщение № 9
Группа: Админы
Ранг: Участник клуба
Сообщений: 2843
Репутация: 1194 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Цитата mult, 11.01.2021 в 00:24, в сообщении № 8 ( писал(а)):
как ее применить? в приложенном файле

В моем приложенном файле в сообщении № 6 всё же настроено и показано...

Либо вы его сохранили как XLSX и макрос исчез при этом (у меня-то см. - XLSM расширение у файла), либо у вас макросы вообще отключены... Надо включить через Параметры \ Центр управления безопасностью (если возникнут вопросы с включением - погуглите самостоятельно).


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
Цитата mult, 11.01.2021 в 00:24, в сообщении № 8 ( писал(а)):
как ее применить? в приложенном файле

В моем приложенном файле в сообщении № 6 всё же настроено и показано...

Либо вы его сохранили как XLSX и макрос исчез при этом (у меня-то см. - XLSM расширение у файла), либо у вас макросы вообще отключены... Надо включить через Параметры \ Центр управления безопасностью (если возникнут вопросы с включением - погуглите самостоятельно).

Автор - Gustav
Дата добавления - 11.01.2021 в 02:41
bmv98rus Дата: Понедельник, 11.01.2021, 16:05 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4147
Репутация: 772 ±
Замечаний: 0% ±

Excel 2013/2016
Пока массивно вот так
=ЛЕВСИМВ(A10;ПРОСМОТР(2;1/ЕСЛИОШИБКА((1/(1/МУМНОЖ(--(СТРОКА($A$1:ИНДЕКС(A:A;ДЛСТР(A10)+1))>=ТРАНСП(СТРОКА($A$1:ИНДЕКС(A:A;ДЛСТР(A10)+1))));--ЕОШИБКА(НАЙТИ(ПСТР(A10&"  ";СТРОКА($A$1:ИНДЕКС(A:A;ДЛСТР(A10)+1));1);" .,?!;:")))*ЕЧИСЛО(НАЙТИ(ПСТР(A10&"  ";СТРОКА($A$1:ИНДЕКС(A:A;ДЛСТР(A10)+1))+1;1);" .,?!;:"))*ЕОШИБКА(НАЙТИ(ПСТР(A10&"  ";СТРОКА($A$1:ИНДЕКС(A:A;ДЛСТР(A10)+1));1);" .,?!;:"))))<C10;1=0);СТРОКА($A$1:ИНДЕКС(A:A;ДЛСТР(A10)+1))))


Чуть упростил
=ЛЕВСИМВ(A10;ПРОСМОТР(C10;ЕСЛИОШИБКА(1/(1/МУМНОЖ(--(СТРОКА($A$1:ИНДЕКС(A:A;ДЛСТР(A10)+1))>=ТРАНСП(СТРОКА($A$1:ИНДЕКС(A:A;ДЛСТР(A10)+1))));--ЕОШИБКА(НАЙТИ(ПСТР(A10&"  ";СТРОКА($A$1:ИНДЕКС(A:A;ДЛСТР(A10)+1));1);" .,?!;:")))*ЕЧИСЛО(НАЙТИ(ПСТР(A10&"  ";СТРОКА($A$1:ИНДЕКС(A:A;ДЛСТР(A10)+1))+1;1);" .,?!;:"))*ЕОШИБКА(НАЙТИ(ПСТР(A10&"  ";СТРОКА($A$1:ИНДЕКС(A:A;ДЛСТР(A10)+1));1);" .,?!;:")));1=0);СТРОКА($A$1:ИНДЕКС(A:A;ДЛСТР(A10)+1))))
К сообщению приложен файл: example2055.xlsx (9.5 Kb)


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Понедельник, 11.01.2021, 19:42
 
Ответить
СообщениеПока массивно вот так
=ЛЕВСИМВ(A10;ПРОСМОТР(2;1/ЕСЛИОШИБКА((1/(1/МУМНОЖ(--(СТРОКА($A$1:ИНДЕКС(A:A;ДЛСТР(A10)+1))>=ТРАНСП(СТРОКА($A$1:ИНДЕКС(A:A;ДЛСТР(A10)+1))));--ЕОШИБКА(НАЙТИ(ПСТР(A10&"  ";СТРОКА($A$1:ИНДЕКС(A:A;ДЛСТР(A10)+1));1);" .,?!;:")))*ЕЧИСЛО(НАЙТИ(ПСТР(A10&"  ";СТРОКА($A$1:ИНДЕКС(A:A;ДЛСТР(A10)+1))+1;1);" .,?!;:"))*ЕОШИБКА(НАЙТИ(ПСТР(A10&"  ";СТРОКА($A$1:ИНДЕКС(A:A;ДЛСТР(A10)+1));1);" .,?!;:"))))<C10;1=0);СТРОКА($A$1:ИНДЕКС(A:A;ДЛСТР(A10)+1))))


Чуть упростил
=ЛЕВСИМВ(A10;ПРОСМОТР(C10;ЕСЛИОШИБКА(1/(1/МУМНОЖ(--(СТРОКА($A$1:ИНДЕКС(A:A;ДЛСТР(A10)+1))>=ТРАНСП(СТРОКА($A$1:ИНДЕКС(A:A;ДЛСТР(A10)+1))));--ЕОШИБКА(НАЙТИ(ПСТР(A10&"  ";СТРОКА($A$1:ИНДЕКС(A:A;ДЛСТР(A10)+1));1);" .,?!;:")))*ЕЧИСЛО(НАЙТИ(ПСТР(A10&"  ";СТРОКА($A$1:ИНДЕКС(A:A;ДЛСТР(A10)+1))+1;1);" .,?!;:"))*ЕОШИБКА(НАЙТИ(ПСТР(A10&"  ";СТРОКА($A$1:ИНДЕКС(A:A;ДЛСТР(A10)+1));1);" .,?!;:")));1=0);СТРОКА($A$1:ИНДЕКС(A:A;ДЛСТР(A10)+1))))

Автор - bmv98rus
Дата добавления - 11.01.2021 в 16:05
  • Страница 1 из 1
  • 1
Поиск:

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