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

Вход

Регистрация

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

 

= Мир MS Excel/Удаление лишних слов в строке - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Удаление лишних слов в строке (Формулы/Formulas)
Удаление лишних слов в строке
scaels1 Дата: Понедельник, 15.12.2014, 23:26 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Добрый день. Помогайте пожалуйста.
Требуется удалить все лишние слова в предложении после последнего пробела в пределах 38 символов. При этом если длинна последнего слова будет меньше 3х символов - то его тоже удалить. Ну и пробел в конце не оставить.

Допустим, есть фраза "Купить квартиру в Москве недорого по низкой цене"
Нужно оставить целые слова в пределах 38 символов,
т.е. в остатке: "Купить квартиру в Москве недорого"
Спасибо!
 
Ответить
СообщениеДобрый день. Помогайте пожалуйста.
Требуется удалить все лишние слова в предложении после последнего пробела в пределах 38 символов. При этом если длинна последнего слова будет меньше 3х символов - то его тоже удалить. Ну и пробел в конце не оставить.

Допустим, есть фраза "Купить квартиру в Москве недорого по низкой цене"
Нужно оставить целые слова в пределах 38 символов,
т.е. в остатке: "Купить квартиру в Москве недорого"
Спасибо!

Автор - scaels1
Дата добавления - 15.12.2014 в 23:26
gling Дата: Понедельник, 15.12.2014, 23:33 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2525
Репутация: 678 ±
Замечаний: 0% ±

2010
Попробуйте такую формулу
Код
=ЕСЛИ(ДЛСТР(СЖПРОБЕЛЫ(ЛЕВСИМВ(СЖПРОБЕЛЫ(A1);38)))<3;"";СЖПРОБЕЛЫ(ЛЕВСИМВ(СЖПРОБЕЛЫ(A1);38)))


ЯД-41001506838083
 
Ответить
СообщениеПопробуйте такую формулу
Код
=ЕСЛИ(ДЛСТР(СЖПРОБЕЛЫ(ЛЕВСИМВ(СЖПРОБЕЛЫ(A1);38)))<3;"";СЖПРОБЕЛЫ(ЛЕВСИМВ(СЖПРОБЕЛЫ(A1);38)))

Автор - gling
Дата добавления - 15.12.2014 в 23:33
scaels1 Дата: Понедельник, 15.12.2014, 23:42 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Добрый вечер! Спасибо за столь быстрый ответ. Попробовал, формула не по словам обрезала, оставила немного лишнего

Купить квартиру в Москве недорого по н
 
Ответить
СообщениеДобрый вечер! Спасибо за столь быстрый ответ. Попробовал, формула не по словам обрезала, оставила немного лишнего

Купить квартиру в Москве недорого по н

Автор - scaels1
Дата добавления - 15.12.2014 в 23:42
Leanna Дата: Вторник, 16.12.2014, 00:05 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 189
Репутация: 78 ±
Замечаний: 0% ±

excel 2010
Должен быть какой-то алгоритм - например можно найти пробелы например, первый-второй, последний пробел, третий с конца и извлекать нужное кол-во символов. Но машина сама по себе не поймет что "по" здесь лишнее.

Можно например с 30го символа искать далее пробел и извлекать с начала и до этого первого пробела после 30го символа
Код
=ЛЕВСИМВ(A1;НАЙТИ(" ";A1;30))


Лучше день потерять, потом за пять минут долететь!

Сообщение отредактировал Leanna - Вторник, 16.12.2014, 00:13
 
Ответить
СообщениеДолжен быть какой-то алгоритм - например можно найти пробелы например, первый-второй, последний пробел, третий с конца и извлекать нужное кол-во символов. Но машина сама по себе не поймет что "по" здесь лишнее.

Можно например с 30го символа искать далее пробел и извлекать с начала и до этого первого пробела после 30го символа
Код
=ЛЕВСИМВ(A1;НАЙТИ(" ";A1;30))

Автор - Leanna
Дата добавления - 16.12.2014 в 00:05
scaels1 Дата: Вторник, 16.12.2014, 00:18 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Leana, спасибо за содействие. Тоже много думал уже. Такой алгоритм не пойдет, потому что может быть слово, начинающееся где нибудь на 27 символе, и заканчивающееся на 40..
 
Ответить
СообщениеLeana, спасибо за содействие. Тоже много думал уже. Такой алгоритм не пойдет, потому что может быть слово, начинающееся где нибудь на 27 символе, и заканчивающееся на 40..

Автор - scaels1
Дата добавления - 16.12.2014 в 00:18
krosav4ig Дата: Вторник, 16.12.2014, 03:17 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
как-то так
Код
=ЛЕВБ(A1;НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1)=" ";СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1))));СЧЁТ((ПОИСКПОЗ(38;ЕСЛИ(ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1)=" ";СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)))))>ЕСЛИ(ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1)=" ";СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)))))^0)+ЕСЛИ(ЕОШ(ПОИСК(" ";ПСТР(A1;ПОИСКПОЗ(38;ЕСЛИ(ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1)=" ";СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)))))-3;3)));1))-1)


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4ig - Вторник, 16.12.2014, 03:21
 
Ответить
Сообщениекак-то так
Код
=ЛЕВБ(A1;НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1)=" ";СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1))));СЧЁТ((ПОИСКПОЗ(38;ЕСЛИ(ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1)=" ";СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)))))>ЕСЛИ(ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1)=" ";СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)))))^0)+ЕСЛИ(ЕОШ(ПОИСК(" ";ПСТР(A1;ПОИСКПОЗ(38;ЕСЛИ(ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1)=" ";СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)))))-3;3)));1))-1)

Автор - krosav4ig
Дата добавления - 16.12.2014 в 03:17
scaels1 Дата: Вторник, 16.12.2014, 03:49 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Ого. вот это формула! Но у меня она почему то ошибку выдает. Файл приложил. Посмотрите пожалуйста, что не так?
[moder]Не надо цитировать посты целиком[/moder]
К сообщению приложен файл: 6043589.xlsx (8.7 Kb)
 
Ответить
СообщениеОго. вот это формула! Но у меня она почему то ошибку выдает. Файл приложил. Посмотрите пожалуйста, что не так?
[moder]Не надо цитировать посты целиком[/moder]

Автор - scaels1
Дата добавления - 16.12.2014 в 03:49
ShAM Дата: Вторник, 16.12.2014, 05:31 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1347
Репутация: 249 ±
Замечаний: 0% ±

Excel 2010
krosav4ig забыл написать, что это формула массива, т.е. вводится одновременным нажатием Ctrl/Shift/Enter.
К сообщению приложен файл: 6043589_1.xlsx (9.6 Kb)
 
Ответить
Сообщениеkrosav4ig забыл написать, что это формула массива, т.е. вводится одновременным нажатием Ctrl/Shift/Enter.

Автор - ShAM
Дата добавления - 16.12.2014 в 05:31
Pelena Дата: Вторник, 16.12.2014, 10:07 | Сообщение № 9
Группа: Админы
Ранг: Местный житель
Сообщений: 19187
Репутация: 4421 ±
Замечаний: ±

Excel 365 & Mac Excel
Ещё вариант, тоже массивная
Код
=ПСТР(ЛЕВБ(A$1&" ";38);1;ЕСЛИ(МАКС((ПСТР(ЛЕВБ(A$1&" ";38);СТРОКА($1:$999);1)=" ")*СТРОКА($1:$999))-НАИБОЛЬШИЙ((ПСТР(ЛЕВБ(A$1&" ";38);СТРОКА($1:$999);1)=" ")*СТРОКА($1:$999);2)>3;МАКС((ПСТР(ЛЕВБ(A$1&" ";38);СТРОКА($1:$999);1)=" ")*СТРОКА($1:$999));НАИБОЛЬШИЙ((ПСТР(ЛЕВБ(A$1&" ";38);СТРОКА($1:$999);1)=" ")*СТРОКА($1:$999);2))-1)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЕщё вариант, тоже массивная
Код
=ПСТР(ЛЕВБ(A$1&" ";38);1;ЕСЛИ(МАКС((ПСТР(ЛЕВБ(A$1&" ";38);СТРОКА($1:$999);1)=" ")*СТРОКА($1:$999))-НАИБОЛЬШИЙ((ПСТР(ЛЕВБ(A$1&" ";38);СТРОКА($1:$999);1)=" ")*СТРОКА($1:$999);2)>3;МАКС((ПСТР(ЛЕВБ(A$1&" ";38);СТРОКА($1:$999);1)=" ")*СТРОКА($1:$999));НАИБОЛЬШИЙ((ПСТР(ЛЕВБ(A$1&" ";38);СТРОКА($1:$999);1)=" ")*СТРОКА($1:$999);2))-1)

Автор - Pelena
Дата добавления - 16.12.2014 в 10:07
scaels1 Дата: Вторник, 16.12.2014, 12:14 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Pelena, спасибо больше! ваш вариант в целом работает, единственное,
1. он удаляет короткий хвостик, даже если строка меньше требуемой длинны, а этого не требуется, ведь мы итак вмещаемся в заданную длину (привел пример ниже по отношению к строкам с ограничением на 33 символа)
2. удаляя короткие хвостики, если идут допустим 2 коротких окончания подряд, то удалит только одно, а надо что бы коротких остатков в конце вообще не оставалось, при условии что мы не вместились в заданную длину и пришлось обрезать.

Исходное: Результат:
корпоративные подарки к нг | корпоративные подарки к
- т.е. длина исходной строки укладывается в заданную в 33 символа, но при этом все равно обрубается окончание, чего не требуется.

Исходное: Результат:
корпоративные подарки к 23 февраля | корпоративные подарки к
- т.е. во второй фразе, 34 символа - превышение 33. надо удалить "февраля" и короткие окончания которые 3 и меньше символа в длину.
должно было бы получиться "корпоративные подарки"

Возможно ли исправить эти нюансы? Спасибо!
 
Ответить
СообщениеPelena, спасибо больше! ваш вариант в целом работает, единственное,
1. он удаляет короткий хвостик, даже если строка меньше требуемой длинны, а этого не требуется, ведь мы итак вмещаемся в заданную длину (привел пример ниже по отношению к строкам с ограничением на 33 символа)
2. удаляя короткие хвостики, если идут допустим 2 коротких окончания подряд, то удалит только одно, а надо что бы коротких остатков в конце вообще не оставалось, при условии что мы не вместились в заданную длину и пришлось обрезать.

Исходное: Результат:
корпоративные подарки к нг | корпоративные подарки к
- т.е. длина исходной строки укладывается в заданную в 33 символа, но при этом все равно обрубается окончание, чего не требуется.

Исходное: Результат:
корпоративные подарки к 23 февраля | корпоративные подарки к
- т.е. во второй фразе, 34 символа - превышение 33. надо удалить "февраля" и короткие окончания которые 3 и меньше символа в длину.
должно было бы получиться "корпоративные подарки"

Возможно ли исправить эти нюансы? Спасибо!

Автор - scaels1
Дата добавления - 16.12.2014 в 12:14
krosav4ig Дата: Вторник, 16.12.2014, 14:03 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
вариант с UDF
К сообщению приложен файл: 123.xls (34.0 Kb)


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщениевариант с UDF

Автор - krosav4ig
Дата добавления - 16.12.2014 в 14:03
scaels1 Дата: Вторник, 16.12.2014, 15:49 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
krosav4ig, работает, но например в случае "подарок на 17 лет" оставляет просто "подарок"
а в случае "подарок другу на 16 лет" - "подарок другу"
т.е. удаляет короткие хвосты, хотя не должен, ведь длинна строки меньше заданной.

при этом если окончание строки больше 4х символов и вся строка меньше 33х - то он делает все правильно - оставляет без изменений.
 
Ответить
Сообщениеkrosav4ig, работает, но например в случае "подарок на 17 лет" оставляет просто "подарок"
а в случае "подарок другу на 16 лет" - "подарок другу"
т.е. удаляет короткие хвосты, хотя не должен, ведь длинна строки меньше заданной.

при этом если окончание строки больше 4х символов и вся строка меньше 33х - то он делает все правильно - оставляет без изменений.

Автор - scaels1
Дата добавления - 16.12.2014 в 15:49
krosav4ig Дата: Вторник, 16.12.2014, 16:55 | Сообщение № 13
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
scaels1, [vba]
Код
Do Until arr(i) > 3
[/vba] замените на [vba]
Код
Do Until arr(i) > 3 Or Len(str) <= lim
[/vba] и будет вам счастье


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщениеscaels1, [vba]
Код
Do Until arr(i) > 3
[/vba] замените на [vba]
Код
Do Until arr(i) > 3 Or Len(str) <= lim
[/vba] и будет вам счастье

Автор - krosav4ig
Дата добавления - 16.12.2014 в 16:55
scaels1 Дата: Понедельник, 22.12.2014, 20:23 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Спасибо! Работает.


Сообщение отредактировал scaels1 - Понедельник, 22.12.2014, 23:33
 
Ответить
СообщениеСпасибо! Работает.

Автор - scaels1
Дата добавления - 22.12.2014 в 20:23
Liam Дата: Понедельник, 22.12.2014, 21:12 | Сообщение № 15
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Спасибо! Работает. ^_^


Сообщение отредактировал Liam - Понедельник, 22.12.2014, 21:18
 
Ответить
СообщениеСпасибо! Работает. ^_^

Автор - Liam
Дата добавления - 22.12.2014 в 21:12
scaels1 Дата: Понедельник, 22.12.2014, 21:13 | Сообщение № 16
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Единственное - подскажите еще пожалуйста, что сделать, что бы макрос еще убирал за собой последний пробел в конце строки, который иногда остается после обработки? СЖПРОБЕЛЫ не помогает...
И как возможно из строки убирать ненужные слова, если они в ней встречаются? Например слова: это, как, что.


Сообщение отредактировал scaels1 - Понедельник, 22.12.2014, 23:33
 
Ответить
СообщениеЕдинственное - подскажите еще пожалуйста, что сделать, что бы макрос еще убирал за собой последний пробел в конце строки, который иногда остается после обработки? СЖПРОБЕЛЫ не помогает...
И как возможно из строки убирать ненужные слова, если они в ней встречаются? Например слова: это, как, что.

Автор - scaels1
Дата добавления - 22.12.2014 в 21:13
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Удаление лишних слов в строке (Формулы/Formulas)
  • Страница 1 из 1
  • 1
Поиск:

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