Вопрос конечно не новый. Однако красивого решения так и не смог найти. При заполнении анкет на сайтах часто возникает необходимость вбить длинный текст в несколько полей. То есть имеется определенная ячейка с текстовой строкой (в данном случае адрес отеля) с количеством символов от 10 до 105. Нужно разбить этот текст на три части длиною не более 35 символов и вставить в 3 ячейки. Слова конечно же отделены пробелом и их нельзя дробить. Например исходная строка: VAMANA TRAVELS INDIA PVT LTD FF10, ANSAL FORTUNE ARCADE, SECTOR 18, NOIDA 201301 А необходимо получить: VAMANA TRAVELS INDIA PVT LTD FF10, ANSAL FORTUNE ARCADE, SECTOR 18, NOIDA 201301
Задача казалось бы простая, но на практике так и не смог получить эффективное решение несколькими формулами. Приходится проводить множество операций. Сначала разбивать текст на слова. Потом вычислять их длину. Потом "склеивать" их по признаку чтобы в строке было не более 35 символов. Может есть какое то простое решение... Заранее спасибо!
Решение на одной из веток форума, подкорректировал. Для первой результирующей ячейки: =ПСТР(N6;1;ПРОСМОТР(2;1/(ПСТР((N6)&" ";СТРОКА($1:$36);1)=" ");СТРОКА($1:$36))) Но все равно вопросы остались. Думаю, что в этой формуле есть лишние функции Не понимаю что делает функция СТРОКА($1:$36);1)=" " и как затем получить строчку номер 2 и 3?
Vrajadas, не хотелось городить монстра из формулы, но пришлось. Во вложении версия с двумя порогами поиска пробела. Не нашел в первом куске, ищет во втором отрезке. Получилось масштабируемо. Попробовал протянуть монстра от JayBhagavan вроде как слетает алгоритм (могу ошибаться)
Проверил сейчас. К сожалению замена на ЕОШ и тп не сработала Но все равно О-огромное спасибо за помощь! Пытаюсь сделать: =ЕСЛИ(ДЛСТР(B5)<$B$1;B5;ПСТР(B5;1;$B$1-$C$1+НАЙТИ(" ";ПСТР(B5;$B$1-$C$1+1;$C$1))));ЕСЛИ(ДЛСТР(B5)<$B$1;B5;ПСТР(B5;1;$B$1-$D$1+НАЙТИ(" ";ПСТР(B5;$B$1-$D$1+1;$D$1)))) но выдает #знач!
В принципе все теперь понятно. Все работает если убрать проверку ошибки Пытаюсь переделать Ваши решения под старый Excel Отпишусь если получится... Всем спасибо!
Если ваши длинные тексты в столбце А, то макрос разделит этот текст по столбцам правее (естественно ячейки должны быть очищены) Для Excel 2003 подходит, удачи!
Код
Sub Razdelenie()
Dim i As Long
Dim j As Integer
Dim n As Integer
Dim iLen As Integer
Dim iLastRow As Long
Dim r As Object
Dim submatches As Object
Set r = CreateObject("vbscript.regexp")
r.Global = True 'проверять по всему тексту
r.MultiLine = True 'многострочный объект
r.Pattern = "\b\w+?\b,?" 'шаблон, маска
iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To iLastRow
Set submatches = r.Execute(Cells(i, 1))
n = 2
iLen = 0
For j = 0 To submatches.Count - 2
If iLen + submatches(j + 1).Length < 35 * (n - 1) Then
Cells(i, n) = Cells(i, n) + submatches(j) + " "
iLen = iLen + submatches(j).Length + 1
Else
n = n + 1
j = j - 1
End If
Next
Cells(i, n) = Cells(i, n) + submatches(j)
Next
End Sub