Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2016, 15:46   #1
OlegZkov
 
Регистрация: 14.11.2012
Сообщений: 7
По умолчанию Авто-перенос слова из ячейки

Здравствуйте. Задача в том, что бы автоматически переносить последнее слово из предложения в ячейке, в другой столбец этой же строки при условии если в предложении больше 75 символов.
OlegZkov вне форума Ответить с цитированием
Старый 22.02.2016, 16:20   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
в ячейке
из какой ячейки?
Цитата:
в другой столбец этой же строки
видите-ли, начиная с офиса 2007 лист содержит 16384 колонок
в какой из них другой столбец?

в конце предложения могут быть знаки препинания, что с ними делать? переносить вместе с последним словом? исключить?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 22.02.2016, 20:05   #3
OlegZkov
 
Регистрация: 14.11.2012
Сообщений: 7
По умолчанию

Например из ячейки A1 в B1. В конце будет точка, переносить слово с ней.
OlegZkov вне форума Ответить с цитированием
Старый 22.02.2016, 21:25   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

1. правой кнопкой мыши по ярлыку листа, где это должно работать
2. в всплывшем меню "исходный текст"
3. в открывшееся окно копируете этот
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address <> "$A$1" Then Exit Sub
  If Len(Target) > 75 Then Cells(1, 2) = Split(Target)(UBound(Split(Target)))
End Sub
4. радуетесь автоматической работе
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 22.02.2016, 22:03   #5
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
Код:
  If Len(Target) > 75 Then Cells(1, 2) = Split(Target)(UBound(Split(Target)))
как читается ета строка?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 22.02.2016, 22:09   #6
OlegZkov
 
Регистрация: 14.11.2012
Сообщений: 7
По умолчанию

Спасибо за ответ почти то что надо. Закинул на R282655679850 50 рублей.
Понимаю что вопрос может быть не совсем понятен, поэтому прилагаю изображение.
Поясню вопрос - в первую колонку вставляются (скопированные) фразы списком, и если какая то из них более 75 символов то последнее слово или слова вырезаются и вставляются в соседнюю ячейку в эту же строку.
OlegZkov вне форума Ответить с цитированием
Старый 22.02.2016, 22:23   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

необходимо ранее предложенный текст процедуры ЗАМЕНИТЬ! на этот
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim c As Range
  If Intersect(Target, Columns(1)) Is Nothing Then Exit Sub
  Application.EnableEvents = False
  For Each c In Intersect(Target, Columns(1))
    If Len(c) > 75 Then c.Offset(0, 1) = Split(c)(UBound(Split(c)))
  Next
  Application.EnableEvents = True
End Sub
это поддерживает коллективное изменение ячеек в колонке А (т.е. если не одно поправить руками а скопировать сразу много с другого источника, то каждая будет проверена и если нужно - последнее слово перенесено в ячейку правее)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 22.02.2016, 22:35   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Саша,
читать справку по ВБА - не зазорно! а даже наоборот и уж точно полезно
не вижу особого смысла пересказывать все, что написано по Split Function
коротко Split делит строку на подстроки (разделитель по умолчанию - пробел)
подстроки записываются в одномерный массив
Split(c) - возвращает массив
UBound(Split(c)) - это размер массива (№ последнего элемента если хочешь)
соотв.
Split(c)(UBound(Split(c))) - последний элемент массива

надеюсь, что зачит это:
Len(c) > 75
обьяснять не надо было)))
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 22.02.2016, 22:50   #9
OlegZkov
 
Регистрация: 14.11.2012
Сообщений: 7
По умолчанию

Круто... только перенесённое слово в правую колонку не удаляется с левой колонки. Можно это как то решить?
OlegZkov вне форума Ответить с цитированием
Старый 22.02.2016, 22:54   #10
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
Саша,
читать справку по ВБА - не зазорно! а даже наоборот и уж точно полезно
не вижу особого смысла пересказывать все, что написано по Split Function
Ох уж любите упрекать человеков. Читал я справку.

Цитата:
Сообщение от IgorGO Посмотреть сообщение
коротко Split делит строку на подстроки (разделитель по умолчанию - пробел)
подстроки записываются в одномерный массив
Split(c) - возвращает массив
UBound(Split(c)) - это размер массива (№ последнего элемента если хочешь)
соотв.
Split(c)(UBound(Split(c))) - последний элемент массива

надеюсь, что зачит это:
Len(c) > 75
обьяснять не надо было)))
Split поделил строку на массив. Ubound показал размер. Split(c)Ubound() - взял последний элемент. и что? Почему на входящий данных: Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
результатом в ячейке В1 получилось понимаете а не одозревали, методами, которых Вы не понимаете?

Все, пардон, вибачаюсь! Я условие неверно понял, почему-то подумал что надо перенести все символы с позиций 75+
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.

Последний раз редактировалось Aleksandr H.; 22.02.2016 в 22:58. Причина: Я условие задачи не прочитал :(
Aleksandr H. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос слова из всех ячеек столбца deserving83 Microsoft Office Excel 7 27.08.2013 22:09
Редактирование ячейки и перенос значения ячейки через форму на другой лис Susven Microsoft Office Excel 2 11.06.2013 09:18
Авто заполнение ячейки Roberto182 Microsoft Office Access 11 25.09.2012 11:25
перенос формата ячейки и преобразование цифр в слова Protuberanez Microsoft Office Excel 11 16.03.2011 00:06
Перенос слова на Си Markuskus Помощь студентам 0 07.12.2009 20:56