Как автоматически заполнить столбец активной ячейки до последней строки - PullRequest
0 голосов
/ 29 апреля 2020

Попытка выполнить приведенный ниже код:

ActiveCell.Offset(1, 0).Select 'Noting but F2





  ActiveCell.FormulaR1C1 = "=LEFT(RC[-1],4)"





' find last row with data in column "A"

lastRow = Cells(Rows.Count, "A").End(xlUp).Row



' copying the formula from "F2" all the way to the last cell

ActiveCell.AutoFill Destination:=Range(ActiveCell.EntireColumn & lastRow), Type:=xlFillDefault

Выдает ошибку, говорящую о несоответствии типов.

Но когда я пытаюсь:

ActiveCell.AutoFill Destination:=Range("F2:F" & lastRow), Type:=xlFillDefault

Работает правильно, но я не хочу, чтобы F2: F там, так как я не знаю, какой столбец будет в будущем.

1 Ответ

0 голосов
/ 30 апреля 2020

Чтобы ответить на ваш вопрос, вы не указали правильный диапазон. Как вы сказали, простой диапазон можно указать

  1. Используя формат строки Range("A1:B4"), где A1 и B4 - два противоположных угла диапазона.

  2. Использование двух углов в качестве ячеек, например Range( Cells(1,1), Cells(4,2) ), где Cells(1,1) равно A1, а Cells(4,2) равно B4

Таким образом, вы можете напишите

ActiveCell.AutoFill Destination:=Range(Cells(2, ActiveCell.Column), Cells(lastRow, ActiveCell.Column)), Type:=xlFillDefault

Чтобы достичь своей цели, вы также можете избежать использования автозаполнения. Формат FormulaR1C1 позволяет писать формулы с «относительными» смещениями / адресами ячеек. Таким образом, после автозаполнения все ячейки в столбце desiderd будут иметь одинаковую FormulaR1C1. Тогда вы можете избежать использования автозаполнения и вручную установить один и тот же FormulaR1C1 для всего столбца.

Таким образом, вы можете написать более простой код, подобный этому:

lastRow = Cells(Rows.Count, "A").End(xlUp).Row
Range(Cells(1, ActiveCell.Column), Cells(lastRow, ActiveCell.Column)).FormulaR1C1 = "=LEFT(RC[-1],4)"
...