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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2009, 01:33   #1
tem1112
Новичок
Джуниор
 
Регистрация: 05.11.2009
Сообщений: 4
По умолчанию помогите поправить макрос

ПОМОГИТЕ

В ячейках последовательность кодов они разделены между собой " - " (пробел дефис пробел) нужно оставлять в ячейке только 65 символов при этом строка всегда будет оканчиваться на "- " (дефис пробел), (т.к. коды имеют одинаковую длину), а остальные будут переноситься ниже, во вновь созданную строку, где опять будет проверяться условие на 65 символов. Но в коде может встречаться текст (21 символ) делить его нельзя, и если при этом условие 65 символов будет дробить этот текст, то нужно перенести его ниже во вновь созданную строку, ячейку снизу. и при этом проверить чтобы последними символами в этой строке были "- " (дефис пробел)(в такой последовательности), если это не так сдвигаться влево пока это условие не выполнится, далее переносы и осуществлять также.

Есть макрос

Sub jurnal()
l = 1
s = Worksheets("Лист1").Cells(l, 4).Value
While Len(s) > 0
s = Worksheets("Лист1").Cells(l, 4).Value
If Len(s) > 65 Then
Worksheets("Лист1").Cells(l, 4).Value = Left(s, 65)
Worksheets("Лист1").Rows(l + 1).Insert
Worksheets("Лист1").Cells(l + 1, 4).Value = Right(s, Len(s) - 65)
End If
l = l + 1
Wend
End Sub

как его поправить чтобы он работал так же, но при достижении в тексте определенного фрагмента (в 21 символ), который нельзя разделить и если этот фрагмент не укладывается в условие 65 символов в ячейке, то происходит перенос на новую ячейку снизу и дальше все также но в этой строке (с неделимым текстом) в любом случае нужно проверить если последние два символа в этой строке не "- " (дефис, пробел)(именно в такой последовательности), то необходимо смещаться влево до тех пор пока последними не станут эти символы, и перенос на новую ячейку снизу, далее все также.

Заранее благодарен.
tem1112 вне форума Ответить с цитированием
Старый 05.11.2009, 01:55   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

На текст бы посмотреть,не совсем понятно.
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 05.11.2009, 02:09   #3
tem1112
Новичок
Джуниор
 
Регистрация: 05.11.2009
Сообщений: 4
По умолчанию

текст примерно такой

123-4-5678 - 987-0-4793 - аа ааааааааа аааааааа - 757-8-4377 - 576-8-8643 - 768-9-6499 - 969-9-8642

неделимый текст в 21 символ везде одинаковый. но может встречаться в ячейке не один раз.
tem1112 вне форума Ответить с цитированием
Старый 05.11.2009, 03:10   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Если условие в 65 символов не выполняется,то в ячейке может при определенных условиях остатся близкое к 65 ,только не более 65
Я правильно понял?
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 05.11.2009, 07:32   #5
tem1112
Новичок
Джуниор
 
Регистрация: 05.11.2009
Сообщений: 4
По умолчанию

да, но не должна делиться фраза в 21 символ и сам код, т. е. оканчиваться строка долнжа примерно так:


111-1-1111 - 111-1-1111- 111-1-1111 - 111-1-1111- 111-1-1111-
111-1-1111 - аа ааааааааа аааааааа - 111-1-1111 -
111-1-1111 - 111-1-1111- 111-1-1111 - 111-1-1111- 111-1-1111-


во вторую строку еще один код (10символов) не влезет поэтому нужен перенос. срока не должна начинаться с пробела или с дефиса.
tem1112 вне форума Ответить с цитированием
Старый 05.11.2009, 07:41   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Вы бы лучше прикрепили файл с примером исходных строк (все возможные варианты) и примером требуемого результата. Давно получили бы нужный ответ. Иначе, к Вам будет еще "куча" уточняющих вопросов.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 05.11.2009, 10:42   #7
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

В левую руку взял хрустальный шар,поговорил с ним ,и написал
такой код.
Для проверки заполняю ячейку,уберете лишнее
Код:
Sub шрустальный_шар()
Dim rezult, s As String
Dim limit, dlinna, l As Integer
Dim ls, d

l = 1
' --------------------------------------------------------

'Выделенное красным убрать
s = "111-1-1111 - 111-1-1111- 111-1-1111 - 111-1-1111- 111-1-1111- 111-1-1111 -" & _
" аа ааааааааа аааааааа - 111-1-1111 -111-1-1111 - 111-1-1111-" & _
" 111-1-1111 - 111-1-1111- 111-1-1111- 123-4-5678 - 987-0-4793 - " & _
"аа ааааааааа аааааааа - 757-8-4377 - 576-8-8643 - 969-9-8642 - " & _
"аа ааааааааа аааааааа - 757-8-4377 - 576-8-8643 - 768-9-6499 - 969-9-8642"
'---------------------------------------------------------------------
Worksheets("Лист1").Cells(l, 4).Value = s
s = ""

s = Worksheets("Лист1").Cells(l, 4).Value

d = Replace(s, "- ", Chr(7))

ls = Split(d, Chr(7), -1)

For n = 0 To UBound(ls)
dlinna = Len(ls(n)) + 2
If n = UBound(ls) Then

Cells(l, 4).Value = rezult

Exit For
End If
If limit + Len(ls(n + 1)) + 2 > 65 Then


Cells(l, 4).Value = rezult
l = l + 1
rezult = ""
limit = 0
Else
rezult = rezult & ls(n) & "- "

limit = limit + dlinna
End If

Next

End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 06.11.2009, 21:25   #8
tem1112
Новичок
Джуниор
 
Регистрация: 05.11.2009
Сообщений: 4
По умолчанию

Спасибо, попробую
tem1112 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите поправить программу! Массивы в С++ progser_ua Помощь студентам 1 03.02.2009 14:07
проблема с выводом данных из таблицы. помогите поправить france@ PHP 4 07.01.2009 12:46
помогите поправить запрос на выборку в дельфи Барби Помощь студентам 1 13.10.2008 11:35
Помогите поправить код SANTA_KLAUD Общие вопросы Delphi 5 30.05.2008 09:01
помогите поправить! koyot Работа с сетью в Delphi 4 13.02.2008 18:46