Консультация № 187103
16.01.2013, 13:46
151.37 руб.
0 6 3
Здравствуйте! У меня возникли сложности с таким вопросом:

Требуется пронумеровать строки с учетом информации в тексте

например: Имеем список в формате Exсel

БТР-183(djvu)20=Андрей работа=163.123
БТР-143(djvu)20=Андрей работа=163.067
БТР-131(djvu)20=Антон работа=163.276
БТР-111(djvu)20=Антон работа=163.011
...
БТР-221(pdf)20.3=Борис ссылка=163.554
БТР-1(djvu)2.3=Андрей работа=163.123
БТР-1(djvu)28.3=Антон работа=167.125
БТР-1(djvu)20.3=Антон работа=203.723
БТР-1(djvu)10.3=Антон работа=203.243
БТР-1(djvu)20.3=Антон работа=203.007
...
БТР-1(djvu)20.3=Антон работа=203.125
БТР-1(djvu)20.3=Антон работа=203.723
БТР-1(djvu)20.3=Антон работа=340.243
БТР-1(djvu)20.3=Антон работа=340.007

а. После второго символа "=" расположено 3-х значное число означающее номер раздела
б. Следующие за этим числом символы в обработке строки не участвуют


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

стало:
163.001 БТР-183(djvu)20=Андрей работа=163.123
163.002 БТР-143(djvu)20=Андрей работа=163.067
163.003 БТР-131(djvu)20=Антон работа=163.276
163.004 БТР-111(djvu)20=Антон работа=163.011
...
163.099 БТР-221(pdf)20.3=Борис ссылка=163.554
163.100 БТР-1(djvu)20.3=Андрей работа=163.123
167.001 БТР-1(djvu)28.3=Антон работа=167.125
203.001 БТР-1(djvu)20.3=Антон работа=203.723
203.002 БТР-1(djvu)10.3=Антон работа=203.243
203.003 БТР-1(djvu)20.3=Антон работа=203.007
...
203.722 БТР-1(djvu)20.3=Антон работа=203.125
203.723 БТР-1(djvu)20.3=Антон работа=203.723
340.001 БТР-1(djvu)20.3=Антон работа=340.243
340.002 БТР-1(djvu)20.3=Антон работа=340.007

* форматирование цветом - условное, только для акцентирования к деталям примера

Обсуждение

Неизвестный
16.01.2013, 14:15
общий
А записи уже отсортированы по номеру раздела?
Неизвестный
16.01.2013, 14:19
общий
Цитата: 351298
А записи уже отсортированы по номеру раздела?


Да
Неизвестный
16.01.2013, 14:28
общий
это ответ
Здравствуйте, Suvorov!

В качестве ответа прилагаю готовый файл скачать файл BTR2.xls [19.0 кб].
Необходимым условием работы формул, является:
1. Предварительная сортировка строк по номеру раздела
2. Количество строк внутри раздела не более 999.
Неизвестный
16.01.2013, 14:44
общий
это ответ
Здравствуйте, Suvorov!

Я конечно, не супер мастер поэтому решаю такие задачи последовательно добавляя столбцы чтобы было понятно как и откуда что появляется.
Служебные строки и столбцы выделены серым, в них ничего менять не надо.

Попробуйте.

Первый столбец "вырезаем" группу: =ЛЕВСИМВ(ПРАВСИМВ(A3;7);3)
Второй столбец проверям что она меняется: =ЕСЛИ(B3-B2>0;1;0)
Третий столбец увеличиваем номер участника: =ЕСЛИ(C3=1;1;D2+1)
Четвертый, результирующий: =СЦЕПИТЬ(B3;".";ТЕКСТ(D3;"000");" ";A3)

Форматирование ТЕКСТ(D3;"000"); задаёт нам количество "ведущих" нулей, если у Вас будет более 999 записей, то в формуле надо будет проставить больше нулей, например пять: ТЕКСТ(D3;"00000");

УДАЧИ
давно
Профессионал
848
1596
16.01.2013, 16:12
общий
это ответ
Здравствуйте, Suvorov!
Предлагаю воспользоваться макросом,
Код:
Sub RenameRows()
Dim mark As Long
Dim sNewName As String
Dim sRazd As String
Dim sOldRazd As String
Dim rCell As Range
Dim cnt As Long
If Selection.Cells.Count < 1 Then Exit Sub
For Each rCell In Selection
mark = InStrRev(rCell.Value, "=")
If mark > 0 Then
sRazd = Mid(rCell.Value, mark + 1, 3)
cnt = IIf(sRazd = sOldRazd, cnt + 1, 1)
sOldRazd = sRazd
sNewName = sRazd & "." & Format(cnt, "000") & "#" & rCell.Value
rCell.Value = sNewName
rCell.TextToColumns DataType:=xlDelimited, Comma:=False, Space:=False, Other:=True, OtherChar:="#"
End If
Next
End Sub

Достаточно выделить столбец с Вашей информацией, затем
Сервис-Макрос-Макросы. Выбрать созданный макрос RenameRows и нажать Выполнить.
Неизвестный
16.01.2013, 17:59
общий
Не могу поделиться впечатлениями - много времени занимает "встраивание" предложенных вариантов в реальные задачи с "самопальным кодом".
Благодарю всех и прошу прощения у уважаемых экспетров.
Форма ответа