Доброго времени суток, Уважаемые! Прощу помощи создании формулы или подсказки функции для многоуровневой нумерации строк по порядку. В файле отчёте имеются блоки с видами работ по объектам, необходимо при изменении вручную в столбце В одинарного номера "Подрядной организации" или хотя бы двойного номера "Наименования объекта", далее по видам работ тройная нумерация пересчитывалась автоматически. Заранее благодарен всем откликнувшимся.
Доброго времени суток, Уважаемые! Прощу помощи создании формулы или подсказки функции для многоуровневой нумерации строк по порядку. В файле отчёте имеются блоки с видами работ по объектам, необходимо при изменении вручную в столбце В одинарного номера "Подрядной организации" или хотя бы двойного номера "Наименования объекта", далее по видам работ тройная нумерация пересчитывалась автоматически. Заранее благодарен всем откликнувшимся.VEKTORVSFREEMAN
и протягиваю вниз для блока 1.1 Работает если добавлять строку в конце блока (последнюю к примеру 1.1.13), но не пересчитывает нижестоящие после вставки в середине блока.
Для ячейки В6 применяю
Код
=B$5&"."&СТРОКА(A1)
и протягиваю вниз для блока 1.1 Работает если добавлять строку в конце блока (последнюю к примеру 1.1.13), но не пересчитывает нижестоящие после вставки в середине блока.VEKTORVSFREEMAN
"Опыт - это то, что получаешь, не получив того, что хотел"
Привет, Руслан! Конечно с доп. столбцами это не совсем то, что хотелось бы, но тем не менее вариант очень интересный. Проверил, работает нормально если только вставлять строки внизу блоков или при вставке всего блока видов работ по одному из объектов снизу всех блоков. Но не пересчитывает если вставлять строку или несколько строк в середине блока или блок с видами работ в середине отчёта (между уже имеющимися блоками) то пересчёт не проводится. Так что скорее всего этот вариант не подойдёт. Подождём, может какие идейки появятся если всё же задача окажется выполнимой в принципе.
Привет, Руслан! Конечно с доп. столбцами это не совсем то, что хотелось бы, но тем не менее вариант очень интересный. Проверил, работает нормально если только вставлять строки внизу блоков или при вставке всего блока видов работ по одному из объектов снизу всех блоков. Но не пересчитывает если вставлять строку или несколько строк в середине блока или блок с видами работ в середине отчёта (между уже имеющимися блоками) то пересчёт не проводится. Так что скорее всего этот вариант не подойдёт. Подождём, может какие идейки появятся если всё же задача окажется выполнимой в принципе.VEKTORVSFREEMAN
"Опыт - это то, что получаешь, не получив того, что хотел"
Russel, при вставке новых строк или блоков в середину, необходимо заново протягивать вниз до конца формулы диапазона А4:С4. [offtop]Может я хочу невозможного!? [/offtop]
Russel, при вставке новых строк или блоков в середину, необходимо заново протягивать вниз до конца формулы диапазона А4:С4. [offtop]Может я хочу невозможного!? [/offtop]VEKTORVSFREEMAN
"Опыт - это то, что получаешь, не получив того, что хотел"
ИМХО, геморройно все это и нужно лишь как украшательство, как в том анекдоте - "на скорость не влияет". Так что можно перед печатью или предоставлением руководству/заказчику добавлять эти столбцы. [offtop]Если посидеть, покумекать подольше - можно и вариант без допстолбцов родить, но это время.[/offtop]
ИМХО, геморройно все это и нужно лишь как украшательство, как в том анекдоте - "на скорость не влияет". Так что можно перед печатью или предоставлением руководству/заказчику добавлять эти столбцы. [offtop]Если посидеть, покумекать подольше - можно и вариант без допстолбцов родить, но это время.[/offtop]Russel
можно перед печатью или предоставлением руководству/заказчику добавлять эти столбцы
В моём случае этот отчёт Руководство смотрит ежедневно и практически через день добавляются новые строки и в запарке могу забыть поправить нумерацию. А она мне необходима, т.к. при рассылке почтой я указываю порядковые номера добавленных строк.
Если не найдется универсального решения, то с удовольствием применю твоё, т.к. единственная протяжка при завершении работы с отчётом, это проще, нежели правка несколько раз в разных диапазонах нумерации. Еще раз благодарю!
можно перед печатью или предоставлением руководству/заказчику добавлять эти столбцы
В моём случае этот отчёт Руководство смотрит ежедневно и практически через день добавляются новые строки и в запарке могу забыть поправить нумерацию. А она мне необходима, т.к. при рассылке почтой я указываю порядковые номера добавленных строк.
Если не найдется универсального решения, то с удовольствием применю твоё, т.к. единственная протяжка при завершении работы с отчётом, это проще, нежели правка несколько раз в разных диапазонах нумерации. Еще раз благодарю! VEKTORVSFREEMAN
"Опыт - это то, что получаешь, не получив того, что хотел"
А как Вам идея воспользоваться рукописной функцией? Она же UDF, она же как бы макрос.
В первую ячейку для нумерации вводим функцию с "прибитой гвоздями" ячейкой, с которой начинаем.
Код
=Rio_Mark(B$4)
Далее протягиваем. Функция ориентируется на содержимое ячеек в столбце справа и на содержимое ячейки сверху. В принципе, по моему алгоритму можно реализовать и формулами... но скорее всего это будет длинно и слабо оптимально. Сам код:
[vba]
Код
Function Rio_Mark(rngX As Range) As String
'Author: Roman "Rioran" Voronov 'Date: the 7-th of November, 2014 'Feedback: voronov_rv@mail.ru
Dim A As Long 'Current row Dim B As Long 'Current column Dim C1 As Byte 'Position of the first "." Dim C2 As Byte 'Position of the second "."
If rngX.Row = A Then Rio_Mark = "1" ElseIf Cells(A, B + 1).Value = "" And Cells(A + 1, B + 1).Value = "" Then Rio_Mark = CStr(Int(Left(StrX, C1 - 1)) + 1) ElseIf Cells(A, B + 1).Value = "" And Cells(A - 1, B + 1).Value = "" Then Rio_Mark = StrX & ".1" ElseIf Cells(A, B + 1).Value = "" Then Rio_Mark = Left(StrX, C1) & CStr(Int(Mid(StrX, C1 + 1, C2 - C1 - 1)) + 1) ElseIf Cells(A - 1, B + 1).Value = "" Then Rio_Mark = StrX & ".1" Else Rio_Mark = Left(StrX, C2) & CStr(Int(Right(StrX, Len(StrX) - C2)) + 1) End If
End Function
[/vba]
VEKTORVSFREEMAN, здравствуйте.
А как Вам идея воспользоваться рукописной функцией? Она же UDF, она же как бы макрос.
В первую ячейку для нумерации вводим функцию с "прибитой гвоздями" ячейкой, с которой начинаем.
Код
=Rio_Mark(B$4)
Далее протягиваем. Функция ориентируется на содержимое ячеек в столбце справа и на содержимое ячейки сверху. В принципе, по моему алгоритму можно реализовать и формулами... но скорее всего это будет длинно и слабо оптимально. Сам код:
[vba]
Код
Function Rio_Mark(rngX As Range) As String
'Author: Roman "Rioran" Voronov 'Date: the 7-th of November, 2014 'Feedback: voronov_rv@mail.ru
Dim A As Long 'Current row Dim B As Long 'Current column Dim C1 As Byte 'Position of the first "." Dim C2 As Byte 'Position of the second "."
Rioran, спасибо за вариант. Попробую, что получится.) С понедельника наведу справки как относятся к макросам те люди которым я сбрасываю его на почту.
Rioran, спасибо за вариант. Попробую, что получится.) С понедельника наведу справки как относятся к макросам те люди которым я сбрасываю его на почту.VEKTORVSFREEMAN
"Опыт - это то, что получаешь, не получив того, что хотел"
Rioran, спасибо за вариант, но проблема всё та же как в сообщении №4 при вставке новых строк. Т.к. рабочее поле (с данными) отчёта содержит много формул, что бы добавить строки я копирую уже имеющиеся и часто приходится их вставлять не в конец, а в середину блока (например пару строк между 1.1.3 и 1.1.4). Тут то и происходит нюанс, что необходимо делать заново протяжку нумерации по блоку вниз с пункта 1.1.1 Видимо вариант, не вариант и с формулами и с макросами.
Rioran, спасибо за вариант, но проблема всё та же как в сообщении №4 при вставке новых строк. Т.к. рабочее поле (с данными) отчёта содержит много формул, что бы добавить строки я копирую уже имеющиеся и часто приходится их вставлять не в конец, а в середину блока (например пару строк между 1.1.3 и 1.1.4). Тут то и происходит нюанс, что необходимо делать заново протяжку нумерации по блоку вниз с пункта 1.1.1 Видимо вариант, не вариант и с формулами и с макросами.VEKTORVSFREEMAN
"Опыт - это то, что получаешь, не получив того, что хотел"
Сообщение отредактировал VEKTORVSFREEMAN - Понедельник, 10.11.2014, 06:38
Добрый день всем! Или утро/вечер/ночь, у кого что) Подскажите, а если нумерация более многоуровневая, то как можно видоизменить формулу? Долго крутила-вертела, но это это уровень сверхпрофессионала прям, а я застряла на более низком уровне :snap: :snap: Формула в сообщении 16 идеальна, но вот разобраться в ней для меня невозможно, к сожалению.... Помогите, пожалуйста :shy:
Добрый день всем! Или утро/вечер/ночь, у кого что) Подскажите, а если нумерация более многоуровневая, то как можно видоизменить формулу? Долго крутила-вертела, но это это уровень сверхпрофессионала прям, а я застряла на более низком уровне :snap: :snap: Формула в сообщении 16 идеальна, но вот разобраться в ней для меня невозможно, к сожалению.... Помогите, пожалуйста :shy:
Если коротенечко, то формула проверяет, есть ли текст в столбце L в текущей строке и строке ниже. Если оба ДА, то это смена организации, если ДА только первое, то это смена объекта, если оба нет, то смена вида работ. А нумерация - это уже дело техники. А теперь посмотрите, чем в Вашей таблице отличаются друг от друга ячейки L27 и L32? Ну, кроме раскраски. Или 22 и 45 строки. Поэтому именно на таком примере задача формулами в общем случае нерешаема. Нужен Ваш конкретный файл, в котором (по возможности) оставлено как можно больше информации - форматирование, расположение, сами данные, если это не конф.
Если коротенечко, то формула проверяет, есть ли текст в столбце L в текущей строке и строке ниже. Если оба ДА, то это смена организации, если ДА только первое, то это смена объекта, если оба нет, то смена вида работ. А нумерация - это уже дело техники. А теперь посмотрите, чем в Вашей таблице отличаются друг от друга ячейки L27 и L32? Ну, кроме раскраски. Или 22 и 45 строки. Поэтому именно на таком примере задача формулами в общем случае нерешаема. Нужен Ваш конкретный файл, в котором (по возможности) оставлено как можно больше информации - форматирование, расположение, сами данные, если это не конф._Boroda_