Товарищи для автопротяжки решил использовать макрос. Макрос нашёл в сети и адаптировал для себя:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Long, Lr As Long If Target.Column =6 Then Application.EnableEvents = False r = Cells(Rows.Count, "F").End(xlUp).Row: Lr = Cells.SpecialCells(xlCellTypeLastCell).Row [J4:P4].AutoFill Destination:=Range([J4], Cells(Lr, "P")), Type:=xlFillDefault Range(Cells(r + 1, "F"), Cells(Lr, "P")).Delete Shift:=xlUp Application.EnableEvents = True End If
End Sub
[/vba]
Что я жду от данной формулы: При заполнении колонки F(6 колонка) происходила автопротяжка формул в колонках с J по Р При удалении значения с колонки F - автоматическое удаление формул с колонок J по P.
Макрос вроде работает, но 1. Иногда удаляет значение, которые я ввожу в колонку F - а не должен! 2. При протяжке он заполняет все строки, а потом удаляет ненужные до последнего значения в столбце F - занимает много времени. 3. Перепротягивает все формулы заного при добавлении нового значения в колонку F - занимает много времени.
Помогите, пожалуйста, подредактировать код, что бы он нормально работал. [moder]Файл, согласно Правилам форума, приложите - поможем.
Добрый день!
Товарищи для автопротяжки решил использовать макрос. Макрос нашёл в сети и адаптировал для себя:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Long, Lr As Long If Target.Column =6 Then Application.EnableEvents = False r = Cells(Rows.Count, "F").End(xlUp).Row: Lr = Cells.SpecialCells(xlCellTypeLastCell).Row [J4:P4].AutoFill Destination:=Range([J4], Cells(Lr, "P")), Type:=xlFillDefault Range(Cells(r + 1, "F"), Cells(Lr, "P")).Delete Shift:=xlUp Application.EnableEvents = True End If
End Sub
[/vba]
Что я жду от данной формулы: При заполнении колонки F(6 колонка) происходила автопротяжка формул в колонках с J по Р При удалении значения с колонки F - автоматическое удаление формул с колонок J по P.
Макрос вроде работает, но 1. Иногда удаляет значение, которые я ввожу в колонку F - а не должен! 2. При протяжке он заполняет все строки, а потом удаляет ненужные до последнего значения в столбце F - занимает много времени. 3. Перепротягивает все формулы заного при добавлении нового значения в колонку F - занимает много времени.
Помогите, пожалуйста, подредактировать код, что бы он нормально работал. [moder]Файл, согласно Правилам форума, приложите - поможем.hyper
Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Long, Lr As Long If Target.Column = 6 Then Application.EnableEvents = False r = Cells(Rows.Count, "F").End(xlUp).Row: Lr = Cells(Rows.Count, "P").End(xlUp).Row [J4:P4].AutoFill Destination:=Range([J4], Cells(r, "P")), Type:=xlFillDefault If Lr > r Then Range(Cells(r + 1, "F"), Cells(Lr, "P")).Delete Shift:=xlUp Application.EnableEvents = True End If End Sub
[/vba] Тогда ненужные ячейки не будут заполнятся формулами (см строчку Destination:=Range([J4], Cells(r, "P"))). Удаляются формулы только при условии Lr > r, определение Lr тоже изменила.
Попробуйте так:[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Long, Lr As Long If Target.Column = 6 Then Application.EnableEvents = False r = Cells(Rows.Count, "F").End(xlUp).Row: Lr = Cells(Rows.Count, "P").End(xlUp).Row [J4:P4].AutoFill Destination:=Range([J4], Cells(r, "P")), Type:=xlFillDefault If Lr > r Then Range(Cells(r + 1, "F"), Cells(Lr, "P")).Delete Shift:=xlUp Application.EnableEvents = True End If End Sub
[/vba] Тогда ненужные ячейки не будут заполнятся формулами (см строчку Destination:=Range([J4], Cells(r, "P"))). Удаляются формулы только при условии Lr > r, определение Lr тоже изменила.Manyasha
Да, если Вы удаляете значение из колонки F, значит номер последней заполненной ячейки в F меньше номера последней заполненной ячейки в P. Тогда удаляем формулы из диапазона F<посл. ячейка +1>:P<посл. ячейка>. Удалять, кстати можно не по одной строке, а сразу несколько, также и добавлять (например, скопировать в F 5 любых значений - формулы протянутся на все новые 5 строчек). Макрос не сработает, если будете работать с НЕпоследними ячейками в F, т.к. Cells(Rows.Count, "F").End(xlUp).Row берет номер именно последней строчки.
Если что-то не понятно, можете остановить макрос на какой-нибудь строчке (клавишей F9), например на [J4:P4]... и посмотреть значения переменных r и Lr.
Да, если Вы удаляете значение из колонки F, значит номер последней заполненной ячейки в F меньше номера последней заполненной ячейки в P. Тогда удаляем формулы из диапазона F<посл. ячейка +1>:P<посл. ячейка>. Удалять, кстати можно не по одной строке, а сразу несколько, также и добавлять (например, скопировать в F 5 любых значений - формулы протянутся на все новые 5 строчек). Макрос не сработает, если будете работать с НЕпоследними ячейками в F, т.к. Cells(Rows.Count, "F").End(xlUp).Row берет номер именно последней строчки.
Если что-то не понятно, можете остановить макрос на какой-нибудь строчке (клавишей F9), например на [J4:P4]... и посмотреть значения переменных r и Lr.Manyasha
ЯД: 410013299366744 WM: R193491431804
Сообщение отредактировал Manyasha - Вторник, 24.02.2015, 23:15
Я в основном работаю только с последними или с сотней тысяч последних)))
Помогите, пожалуйста, ещё с одной задачей. А если мне нужно автопротяжку использовать ещё в некоторых столбцах, но с перерывами в несколько столбцов. Как в примере 3. Пытаюсь добавить дополнительно их, но к сожалению не получается.
Я в основном работаю только с последними или с сотней тысяч последних)))
Помогите, пожалуйста, ещё с одной задачей. А если мне нужно автопротяжку использовать ещё в некоторых столбцах, но с перерывами в несколько столбцов. Как в примере 3. Пытаюсь добавить дополнительно их, но к сожалению не получается.hyper