Set sourceCell.Formula = "=ИНДЕКС(План!$G$2:$G$40;АГРЕГАТ(15;6;(СТРОКА(План!$D$2:$D$40)-СТРОКА(План!$D$2)+1)/(План!$D$2:$D$40=" & ws.Cells(i, "A").Value & ws.Cells(i, "E").Value & ");1))" Set destinationCell = Cells(i, "F") destinationCell.Formula = sourceCell.Formula
[/vba]
Далее вставка вторым циклом: [vba]
Код
Set destinationCell = Cells(i + j, "F")
[/vba] Но макрос останавливается и подчеркивает присвоение переменной желтой заливкой.
Пробовал другой вариант если скопировать формулу из ячейки с формулой:
[vba]
Код
Set sourceCell = Cells(i - 1, "F") Set destinationCell = Cells(i, "F") destinationCell.Formula = sourceCell.Formula
[/vba]
и далее вставка циклом: Далее вставка вторым циклом: [vba]
Код
Set destinationCell = Cells(i + j, "F")
[/vba]
так ошибку не выдает, но все формулы ссылаются на первую строку (i-1) откуда была скопирована формула, а не на текущие строки (i+j) Прошу помочь, что я делаю не так?
Set sourceCell.Formula = "=ИНДЕКС(План!$G$2:$G$40;АГРЕГАТ(15;6;(СТРОКА(План!$D$2:$D$40)-СТРОКА(План!$D$2)+1)/(План!$D$2:$D$40=" & ws.Cells(i, "A").Value & ws.Cells(i, "E").Value & ");1))" Set destinationCell = Cells(i, "F") destinationCell.Formula = sourceCell.Formula
[/vba]
Далее вставка вторым циклом: [vba]
Код
Set destinationCell = Cells(i + j, "F")
[/vba] Но макрос останавливается и подчеркивает присвоение переменной желтой заливкой.
Пробовал другой вариант если скопировать формулу из ячейки с формулой:
[vba]
Код
Set sourceCell = Cells(i - 1, "F") Set destinationCell = Cells(i, "F") destinationCell.Formula = sourceCell.Formula
[/vba]
и далее вставка циклом: Далее вставка вторым циклом: [vba]
Код
Set destinationCell = Cells(i + j, "F")
[/vba]
так ошибку не выдает, но все формулы ссылаются на первую строку (i-1) откуда была скопирована формула, а не на текущие строки (i+j) Прошу помочь, что я делаю не так?Avgust1
Avgust1, будьте так любезны. прочитайте правила форума и оформите ваш пост в соответствии с ними. Помогающим: просьба не отвечать до устранения нарушений
Avgust1, будьте так любезны. прочитайте правила форума и оформите ваш пост в соответствии с ними. Помогающим: просьба не отвечать до устранения нарушенийкитин
Не судите очень строго:я пытаюсь научиться ЯД 41001877306852
китин, Здравствуйте уважаемый. Не совсем понял, что не так с моим постом, но с удовольствием его исправлю согласно ваших требований. Где можно ознакомиться с этими требованиями? Не нашел ссылку на правила.
китин, Здравствуйте уважаемый. Не совсем понял, что не так с моим постом, но с удовольствием его исправлю согласно ваших требований. Где можно ознакомиться с этими требованиями? Не нашел ссылку на правила.Avgust1
Avgust1, китин, он же модератор писал о тегах, в режиме редактирования 1го поста, выделяйте текст макроса и жмите кнопку #
в Вашем файле ни чего не понял, хотите вставлять формулу только напротив желтых ячеек, а остальные строки хотите удалить? формула по-моему перемудрена
Avgust1, китин, он же модератор писал о тегах, в режиме редактирования 1го поста, выделяйте текст макроса и жмите кнопку #
в Вашем файле ни чего не понял, хотите вставлять формулу только напротив желтых ячеек, а остальные строки хотите удалить? формула по-моему перемудренаNic70y
Sub u_16() 'Определяем последнюю заполненную строку в столбце A a = Cells(Rows.Count, "a").End(xlUp).Row 'цикл от последней до 4 строки For b = a To 4 Step -1 'если текущая ячейка в столбце A имеет желтую заливку If Range("a" & b).Interior.Color = RGB(255, 255, 153) Then 'значение столбцов A & E текущей строки c = Range("a" & b).Value & Range("e" & b).Value 'Определяем последнюю заполненную строку в столбце D листа План d = Sheets("План").Cells(Rows.Count, "d").End(xlUp).Row 'аналог =ПОИСКПОЗ() e = Application.Match(c, Sheets("План").Range("d2:d" & d), 0) 'аналог =ЕЧИСЛО() If IsNumeric(e) Then Range("f" & b) = Sheets("План").Range("g" & e + 1).Value End If End If 'далее можно условие удаления строки в этом же цикле Next End Sub
[/vba]
Avgust1, если я правильно понял, вариант: [vba]
Код
Sub u_16() 'Определяем последнюю заполненную строку в столбце A a = Cells(Rows.Count, "a").End(xlUp).Row 'цикл от последней до 4 строки For b = a To 4 Step -1 'если текущая ячейка в столбце A имеет желтую заливку If Range("a" & b).Interior.Color = RGB(255, 255, 153) Then 'значение столбцов A & E текущей строки c = Range("a" & b).Value & Range("e" & b).Value 'Определяем последнюю заполненную строку в столбце D листа План d = Sheets("План").Cells(Rows.Count, "d").End(xlUp).Row 'аналог =ПОИСКПОЗ() e = Application.Match(c, Sheets("План").Range("d2:d" & d), 0) 'аналог =ЕЧИСЛО() If IsNumeric(e) Then Range("f" & b) = Sheets("План").Range("g" & e + 1).Value End If End If 'далее можно условие удаления строки в этом же цикле Next End Sub
Извините, видимо я очень коряво объяснил задачу, попробую сформулировать по другому: есть формула скопированная из 334 строки столбца G листа данные "=ИНДЕКС(План!$F$2:$F$40;АГРЕГАТ(15;6;(СТРОКА(План!$D$2:$D$40)-СТРОКА(План!$D$2)+1)/(План!$D$2:$D$40=Данные!B334&Данные!F334);1))", которая содержится к каждой ячейке столбца G листа Данные. При добавлении новых строк с данными в лист Данные (после 334 строки) с пустой ячейкой в столбце G, мне необходимо обработать макросом новые строки пересчитывая данные, в том числе скопировать эту формулу из предыдущей строки (т.е. 334-й) и вставить ее в строку 335 и далее (пока не закончатся строки с добавленными данными). При вставки в новую строку (напр. 335-ю), формула должна теперь брать данные из 335 строки, т.е. выглядеть так: "=ИНДЕКС(План!$F$2:$F$40;АГРЕГАТ(15;6;(СТРОКА(План!$D$2:$D$40)-СТРОКА(План!$D$2)+1)/(План!$D$2:$D$40=Данные!B335&Данные!F335);1))". Конечно самый простой вариант, просто протянуть формулу на новые строки, но это не наш метод :)) Как это сделать через макрос?
Извините, видимо я очень коряво объяснил задачу, попробую сформулировать по другому: есть формула скопированная из 334 строки столбца G листа данные "=ИНДЕКС(План!$F$2:$F$40;АГРЕГАТ(15;6;(СТРОКА(План!$D$2:$D$40)-СТРОКА(План!$D$2)+1)/(План!$D$2:$D$40=Данные!B334&Данные!F334);1))", которая содержится к каждой ячейке столбца G листа Данные. При добавлении новых строк с данными в лист Данные (после 334 строки) с пустой ячейкой в столбце G, мне необходимо обработать макросом новые строки пересчитывая данные, в том числе скопировать эту формулу из предыдущей строки (т.е. 334-й) и вставить ее в строку 335 и далее (пока не закончатся строки с добавленными данными). При вставки в новую строку (напр. 335-ю), формула должна теперь брать данные из 335 строки, т.е. выглядеть так: "=ИНДЕКС(План!$F$2:$F$40;АГРЕГАТ(15;6;(СТРОКА(План!$D$2:$D$40)-СТРОКА(План!$D$2)+1)/(План!$D$2:$D$40=Данные!B335&Данные!F335);1))". Конечно самый простой вариант, просто протянуть формулу на новые строки, но это не наш метод :)) Как это сделать через макрос?Avgust1
просто протянуть формулу на новые строки, но это не наш метод :)) Как это сделать через макрос?
Например, так можно: [vba]
Код
Sub fillFormulaInNewRows() Dim rng1 As Range, rngCurr As Range, rngDest As Range Set rng1 = Cells(Rows.Count, "G").End(xlUp) Set rngCurr = rng1.CurrentRegion Set rngDest = rng1.Resize(rngCurr.Row + rngCurr.Rows.Count - rng1.Row) rng1.AutoFill rngDest End Sub
[/vba]
P.S. Кстати, по поводу "протянуть". Необязательно же тянуть путем цепляния правого нижнего угла ячейки-источника и буквального протягивания вниз на нужное количество строк при зажатой левой кнопке мыши. Достаточно просто дабл-кликнуть правый нижний угол ячейки (в тот момент, когда курсор мыши превращается в крестик при наведении на угол). И вот этот дабл-клик мне представляется даже более быстрым, чем запуск макроса по кнопке или по Alt+F8.
просто протянуть формулу на новые строки, но это не наш метод :)) Как это сделать через макрос?
Например, так можно: [vba]
Код
Sub fillFormulaInNewRows() Dim rng1 As Range, rngCurr As Range, rngDest As Range Set rng1 = Cells(Rows.Count, "G").End(xlUp) Set rngCurr = rng1.CurrentRegion Set rngDest = rng1.Resize(rngCurr.Row + rngCurr.Rows.Count - rng1.Row) rng1.AutoFill rngDest End Sub
[/vba]
P.S. Кстати, по поводу "протянуть". Необязательно же тянуть путем цепляния правого нижнего угла ячейки-источника и буквального протягивания вниз на нужное количество строк при зажатой левой кнопке мыши. Достаточно просто дабл-кликнуть правый нижний угол ячейки (в тот момент, когда курсор мыши превращается в крестик при наведении на угол). И вот этот дабл-клик мне представляется даже более быстрым, чем запуск макроса по кнопке или по Alt+F8.Gustav