в общем алгоритм простой: в аналогичную по формату ячейку + переносить по словам суем по-символьно текст в ячейку, если ее высота увеличивается - переносим
[vba]
Код
Sub ur_() a = Range("a1").Value 'текст b = Len(a) 'кол-во символом 'цикл по кол-ву символов Dim arr() 'объявим массив n = 0 For d = 1 To b 'значение ячейки, в которую выгружаем c = Sheets("2").Range("a1").Value 'добавляем к выгрузке символ Sheets("2").Range("a1") = c & Mid(a, d, 1) c = Sheets("2").Range("a1").Value 'проверяем высоту строки после выгрузки e = Sheets("2").Range("a1").RowHeight 'переобъявим массив ReDim Preserve arr(n) 'если высота строки > чем по умолчанию If e > 15 Then f = InStrRev(c, " ") 'ищем пробел If f > 0 Then 'если пробел найден x = Left(c, f - 1) 'до пробела 'запищем в ячейку, то что осталось после пробела Sheets("2").Range("a1") = Trim(Mid(c, f, b)) Else x = Left(c, Len(c) - 1) 'не включая перенесенный символ 'запищем в ячейку перенесенный символ Sheets("2").Range("a1") = Trim(Right(c, 1)) End If arr(n) = Trim(x) 'запишем текст в массив n = n + 1 End If 'оставшийся текст If d = b Then arr(n) = Trim(c) End If Next 'очистим ячейку Sheets("2").Range("a1").ClearContents 'выгрузим For g = 0 To n Range("a" & g + 1) = arr(g) Next End Sub
[/vba]
соот. не ориентируемся на кол-во символов или пиксели метод конечно медленный
[p.s.]возможны косяки - особо не тестил[/p.s.]
Всем привет!
в общем алгоритм простой: в аналогичную по формату ячейку + переносить по словам суем по-символьно текст в ячейку, если ее высота увеличивается - переносим
[vba]
Код
Sub ur_() a = Range("a1").Value 'текст b = Len(a) 'кол-во символом 'цикл по кол-ву символов Dim arr() 'объявим массив n = 0 For d = 1 To b 'значение ячейки, в которую выгружаем c = Sheets("2").Range("a1").Value 'добавляем к выгрузке символ Sheets("2").Range("a1") = c & Mid(a, d, 1) c = Sheets("2").Range("a1").Value 'проверяем высоту строки после выгрузки e = Sheets("2").Range("a1").RowHeight 'переобъявим массив ReDim Preserve arr(n) 'если высота строки > чем по умолчанию If e > 15 Then f = InStrRev(c, " ") 'ищем пробел If f > 0 Then 'если пробел найден x = Left(c, f - 1) 'до пробела 'запищем в ячейку, то что осталось после пробела Sheets("2").Range("a1") = Trim(Mid(c, f, b)) Else x = Left(c, Len(c) - 1) 'не включая перенесенный символ 'запищем в ячейку перенесенный символ Sheets("2").Range("a1") = Trim(Right(c, 1)) End If arr(n) = Trim(x) 'запишем текст в массив n = n + 1 End If 'оставшийся текст If d = b Then arr(n) = Trim(c) End If Next 'очистим ячейку Sheets("2").Range("a1").ClearContents 'выгрузим For g = 0 To n Range("a" & g + 1) = arr(g) Next End Sub
[/vba]
соот. не ориентируемся на кол-во символов или пиксели метод конечно медленный
[p.s.]возможны косяки - особо не тестил[/p.s.]Nic70y
Посмотрел ради интереса. Честно говоря, не представляю, где может понадобиться операция "текст по ячейкам". Алгоритм понятный и простой. Но, Николай, не обижайся, пожалуйста, на "готовые решения" топик явно не тянет хотя бы потому, что макрос "в теле" жёстко привязан к именам листов и конкретной ячейке. К тому же процедура тупо заполняет вниз все ячейки, начиная от стартовой, не взирая на то, что несколькими строками ниже могут быть нужные пользователю данные. А метод UnDo в Excel для макросов почему-то до сих пор так и не реализован мелко-мягкими разработчиками. И "скрипт невозможно провернуть назад" ¯\_(ツ)_/¯ Так что как демонстрация алгоритма - это интересно, но явно не готовое решение, которое можно тупо засунуть в Personal или в надстройку и вызывать при необходимости.
Посмотрел ради интереса. Честно говоря, не представляю, где может понадобиться операция "текст по ячейкам". Алгоритм понятный и простой. Но, Николай, не обижайся, пожалуйста, на "готовые решения" топик явно не тянет хотя бы потому, что макрос "в теле" жёстко привязан к именам листов и конкретной ячейке. К тому же процедура тупо заполняет вниз все ячейки, начиная от стартовой, не взирая на то, что несколькими строками ниже могут быть нужные пользователю данные. А метод UnDo в Excel для макросов почему-то до сих пор так и не реализован мелко-мягкими разработчиками. И "скрипт невозможно провернуть назад" ¯\_(ツ)_/¯ Так что как демонстрация алгоритма - это интересно, но явно не готовое решение, которое можно тупо засунуть в Personal или в надстройку и вызывать при необходимости.Alex_ST