VBA скопировать формулу в последнюю строку с данными (на основе другого столбца) не работает - PullRequest
1 голос
/ 13 февраля 2020

Я не могу заставить это работать даже после того, как попробую всевозможные возможности для объявления и создания экземпляра переменной LastRow. Я хочу вывести результаты формулы из столбца M только до последней строки с данными на основе столбца G (который будет строкой 23). Теперь формула перетаскивается до строки 224.

Аналогично, мне нужно вывести формулы для столбцов N и O на основе последней строки с данными в столбце H (которая будет строкой). 24). Здесь также формула опускается до 224 вместо строки 24.

Что я делаю не так? Я знаю, что для столбцов N и O мне нужно будет создать вторую переменную, основанную на столбце H, но я хочу сначала запустить одну переменную, а затем попробовать вторую.

Dim LastRow As Long
LastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, 8).End(xlUp).Row

Range("M2").Select
ActiveCell.FormulaR1C1 = "=IFERROR(RC[-6]/'Sheet1'!R1C2,0)"
Range("N2").Select
ActiveCell.FormulaR1C1 = "=IFERROR(RC[-6]/'Sheet1'!R1C2,0)"
Range("O2").Select
ActiveCell.FormulaR1C1 = "=IFERROR(RC[-3]/'Sheet1'!R1C2,0)"

Range("M2").Select
Selection.AutoFill Destination:=Range("M2:M2" & LastRow)
Range("M3:M" & LastRow).Formula = "=G3&"",""&L3"

Range("M2").Select
ActiveCell.FormulaR1C1 = "=IFERROR(RC[-6]/'Sheet1'!R1C2,0)"
Range("N2").Select
ActiveCell.FormulaR1C1 = "=IFERROR(RC[-6]/'Sheet1'!R1C2,0)"
Range("O2").Select
ActiveCell.FormulaR1C1 = "=IFERROR(RC[-3]/'Sheet1'!R1C2,0)"

Range("M2").Select
Selection.AutoFill Destination:=Range("M2:M2" & LastRow)

Range("N2:O2").Select 'changed from M2 to N2

Selection.AutoFill Destination:=Range("N2:O2" & LastRow) 'changed from M2 to N2

'Range("N2:O2" & LastRow).FillDown
Range(Selection, Selection.End(xlDown)).Select

1 Ответ

1 голос
/ 13 февраля 2020

Создайте две переменные последней строки, избавьтесь от Select, ActiveCell и установите диапазон с помощью Resize. Вам, вероятно, потребуется использовать gRow - 1, поскольку вы начинаете с M2 и т. Д. c. Вот пример ...

Dim gRow As Long, hRow As Long

gRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, 7).End(xlUp).Row
hRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, 8).End(xlUp).Row

Range("M2").Resize(gRow).FormulaR1C1 = "=IFERROR(RC[-6]/'Sheet1'!R1C2,0)"  
Range("N2").Resize(hRow).FormulaR1C1 = "=IFERROR(RC[-6]/'Sheet1'!R1C2,0)"     
Range("O2").Resize(hRow).FormulaR1C1 = "=IFERROR(RC[-6]/'Sheet1'!R1C2,0)"       
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...