Здравствуйте, знатоки. подскажите, пожалуйста, как именно можно разделить текст в столбцах по количеству символов? при этом, чтобы слова не разделялись, а оставались целыми и переносились в другой столбец с предлогами.
а теперь конкретнее: например, нужно разделить ячейку на 30 символе. Если 30 символ находится посреди слова, то делать перенос начиная с этого слова. а если перед словом, на котором 30 символ, есть предлог (слово из максимум 3 букв), то разделение делать от предлога. то есть в некоторых случаях перенос будет происходить по факту до 30 символа.
а теперь пример: имеем исходные данные Недорогой ремонт квартир в Москве по факту 30 символ находится на слове "Москве" - это "с", но исходя из нужных функций, переносится должно "в Москве". таким образом должно получится два столбца: Недорогой ремонт квартир | в Москве
надеюсь, понятно описал=)
Здравствуйте, знатоки. подскажите, пожалуйста, как именно можно разделить текст в столбцах по количеству символов? при этом, чтобы слова не разделялись, а оставались целыми и переносились в другой столбец с предлогами.
а теперь конкретнее: например, нужно разделить ячейку на 30 символе. Если 30 символ находится посреди слова, то делать перенос начиная с этого слова. а если перед словом, на котором 30 символ, есть предлог (слово из максимум 3 букв), то разделение делать от предлога. то есть в некоторых случаях перенос будет происходить по факту до 30 символа.
а теперь пример: имеем исходные данные Недорогой ремонт квартир в Москве по факту 30 символ находится на слове "Москве" - это "с", но исходя из нужных функций, переносится должно "в Москве". таким образом должно получится два столбца: Недорогой ремонт квартир | в Москве
ShAM, здравствуйте) сам алгоритм работы верный) но мне нужно обрабатывать несколько ячеек в столбце, а результат работы размещать не под ячейкой, а в ячейке в правом столбце. то есть, чтобы оно не вниз шло, а вправо) можете допилить?) я уверен, что для вас это дело займёт не более 30 секунд) а я вам на киви скину благодарность на мороженое за ваше время)
ShAM, здравствуйте) сам алгоритм работы верный) но мне нужно обрабатывать несколько ячеек в столбце, а результат работы размещать не под ячейкой, а в ячейке в правом столбце. то есть, чтобы оно не вниз шло, а вправо) можете допилить?) я уверен, что для вас это дело займёт не более 30 секунд) а я вам на киви скину благодарность на мороженое за ваше время)BEEaR
это то, что нужно) но он не обрабатывает строки разом. то есть я выделяю несколько строк, нажимаю кнопку, а он обрабатывает только одну строку за раз. то есть если нужно обработать 10 строк, для этого необходимо 10 раз выделить и 10 раз нажать на кнопку) а можно, чтоб он разом это делал для всех выделенных строк? я может что-то не понимаю)
это то, что нужно) но он не обрабатывает строки разом. то есть я выделяю несколько строк, нажимаю кнопку, а он обрабатывает только одну строку за раз. то есть если нужно обработать 10 строк, для этого необходимо 10 раз выделить и 10 раз нажать на кнопку) а можно, чтоб он разом это делал для всех выделенных строк? я может что-то не понимаю)BEEaR
ну вы откликнулись, помогли мне. все мы используем предыдущий опыт других людей, иначе бы не было прогресса) это вы уже можете поделиться с Андреем, так как использовали его наработки, но я говорю спасибо вам. но и теперь уже, так как знаю, что Андрей внёс в это большой вклад, ему тоже=) в целом я понял, что вы имеете ввиду: работа была для вас не тяжёлая) однако мне вы очень сильно помогли минимизировать ручной труд) если что кидайте в личку реквизиты) спасибо)
ну вы откликнулись, помогли мне. все мы используем предыдущий опыт других людей, иначе бы не было прогресса) это вы уже можете поделиться с Андреем, так как использовали его наработки, но я говорю спасибо вам. но и теперь уже, так как знаю, что Андрей внёс в это большой вклад, ему тоже=) в целом я понял, что вы имеете ввиду: работа была для вас не тяжёлая) однако мне вы очень сильно помогли минимизировать ручной труд) если что кидайте в личку реквизиты) спасибо)BEEaR
Sub мяв() Const minLenth& = 3 Dim arr, arrt(), myLong&, flag As Boolean Dim i&, k&, rr&, kk& On Error GoTo мяв_Error ' myLong = 25 myLong = InputBox("Длина строки не задана" & Chr(13) & Chr(13) _ & "предлагается 30 знаков", , 30) arr = Split(Trim$(Selection)) Do ReDim Preserve arrt(k) Do While kk <= myLong arrt(k) = arrt(k) & " " & arr(i) i = i + 1 If i > UBound(arr) Then flag = True: Exit Do kk = Len(arrt(k)) + Len(arr(i)) - 1 Loop kk = 0
If Len(arrt(k)) - InStrRev(arrt(k), " ") < minLenth Then arrt(k) = Trim$(Left$(arrt(k), InStrRev(arrt(k), " "))) i = i - 1 Else arrt(k) = Trim$(arrt(k)) End If
If flag Then Else k = k + 1
Loop While Not flag Selection.Offset(, 2).Resize(, UBound(arrt)+1) = arrt On Error GoTo 0 Exit Sub
мяв_Error: End Sub
[/vba]
[vba]
Код
Sub мяв() Const minLenth& = 3 Dim arr, arrt(), myLong&, flag As Boolean Dim i&, k&, rr&, kk& On Error GoTo мяв_Error ' myLong = 25 myLong = InputBox("Длина строки не задана" & Chr(13) & Chr(13) _ & "предлагается 30 знаков", , 30) arr = Split(Trim$(Selection)) Do ReDim Preserve arrt(k) Do While kk <= myLong arrt(k) = arrt(k) & " " & arr(i) i = i + 1 If i > UBound(arr) Then flag = True: Exit Do kk = Len(arrt(k)) + Len(arr(i)) - 1 Loop kk = 0
If Len(arrt(k)) - InStrRev(arrt(k), " ") < minLenth Then arrt(k) = Trim$(Left$(arrt(k), InStrRev(arrt(k), " "))) i = i - 1 Else arrt(k) = Trim$(arrt(k)) End If
If flag Then Else k = k + 1
Loop While Not flag Selection.Offset(, 2).Resize(, UBound(arrt)+1) = arrt On Error GoTo 0 Exit Sub
Немного модифицировал. Переносит на новую строку все предлоги (текст до 3 символов) Мяв (25 символов) - "разделяем правильно и | не правильно" Мяу (25 символов) - "разделяем правильно | и не правильно" [vba]
Код
Sub мяу() Const minLenth& = 3 Dim arr, arrt(), myLong&, flag As Boolean Dim i&, k&, rr&, kk& ' myLong = 25 On Error GoTo мяу_Error
myLong = InputBox("Длина строки не задана" & Chr(13) & Chr(13) _ & "предлагается 30 знаков", , 30) arr = Split(Trim$(Selection)) Do ReDim Preserve arrt(k) Do While kk <= myLong arrt(k) = arrt(k) & " " & arr(i) i = i + 1 If i > UBound(arr) Then flag = True: Exit Do kk = Len(arrt(k)) + Len(arr(i)) - 1 Loop kk = 0 Do While Len(arrt(k)) - InStrRev(arrt(k), " ") < minLenth If Len(arrt(k)) < minLenth Then Exit Do arrt(k) = Trim$(Left$(arrt(k), InStrRev(arrt(k), " "))) i = i - 1 Loop arrt(k) = Trim$(arrt(k)) k = k + 1 Loop Until flag Selection.Offset(, 2).Resize(, UBound(arrt) + 1) = arrt On Error GoTo 0 Exit Sub мяу_Error: MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure мяу of Module Module2" End Sub
[/vba]
Немного модифицировал. Переносит на новую строку все предлоги (текст до 3 символов) Мяв (25 символов) - "разделяем правильно и | не правильно" Мяу (25 символов) - "разделяем правильно | и не правильно" [vba]
Код
Sub мяу() Const minLenth& = 3 Dim arr, arrt(), myLong&, flag As Boolean Dim i&, k&, rr&, kk& ' myLong = 25 On Error GoTo мяу_Error
myLong = InputBox("Длина строки не задана" & Chr(13) & Chr(13) _ & "предлагается 30 знаков", , 30) arr = Split(Trim$(Selection)) Do ReDim Preserve arrt(k) Do While kk <= myLong arrt(k) = arrt(k) & " " & arr(i) i = i + 1 If i > UBound(arr) Then flag = True: Exit Do kk = Len(arrt(k)) + Len(arr(i)) - 1 Loop kk = 0 Do While Len(arrt(k)) - InStrRev(arrt(k), " ") < minLenth If Len(arrt(k)) < minLenth Then Exit Do arrt(k) = Trim$(Left$(arrt(k), InStrRev(arrt(k), " "))) i = i - 1 Loop arrt(k) = Trim$(arrt(k)) k = k + 1 Loop Until flag Selection.Offset(, 2).Resize(, UBound(arrt) + 1) = arrt On Error GoTo 0 Exit Sub мяу_Error: MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure мяу of Module Module2" End Sub
Изучив предыдущие посты, не решил свою задачу: Есть форма акта скрытых работ. Для удобства заполнения воспользовался функциями просмотра и сцепления.
Но осталась задача: текстовое содержимое ячейки разделить (предположим по 80 символов) и отобразить в нескольких строках формы, при этом не меняя количество строк в форме, а только заполняя пустые.
в листах БК и УО приложенного файла этот текст расположен в ячейках M60 и M75, а отобразить разделенный текст требуется в выделенных желтым цветом слева строках.
Число строк (максимальное) в одном случае 5, а в другом 4.
И если возможно, то пересчет этих действий производить при переходе с одного листа на другой, без использования доп. кнопок (иконок).
Здравствуйте !
Изучив предыдущие посты, не решил свою задачу: Есть форма акта скрытых работ. Для удобства заполнения воспользовался функциями просмотра и сцепления.
Но осталась задача: текстовое содержимое ячейки разделить (предположим по 80 символов) и отобразить в нескольких строках формы, при этом не меняя количество строк в форме, а только заполняя пустые.
в листах БК и УО приложенного файла этот текст расположен в ячейках M60 и M75, а отобразить разделенный текст требуется в выделенных желтым цветом слева строках.
Число строк (максимальное) в одном случае 5, а в другом 4.
И если возможно, то пересчет этих действий производить при переходе с одного листа на другой, без использования доп. кнопок (иконок).amedov78