Найти тему
ExcelVba

Макрос протягивания (автозаполнения) формул в Excel

Подробно о том, как работать с данным макросом я рассказываю в видео по ссылке (https://rutube.ru/video/47953be926be1daa43dc64d50d434e77/)

В своей практике я часто сталкивался с ситуациями, когда было необходимо прописать макрос протягивания (автозаполнения) формул в Excel.

Есть много вариантов, как это можно сделать, но моим безусловным фаворитом вот уже более пяти лет остаётся следующий

Sub Протяжка_формул()
'
' Протяжка_формул Макрос
'

'
Range("D2:D" & Cells(Rows.Count, "D").End(xlUp).Row).Select
Selection.ClearContents
[D2].Resize(Cells(Rows.Count, "A").End(xlUp).Row - 1, 1).FormulaR1C1 = "=RC[-2]*RC[-1]"

End Sub

Разберём более подробно, как с ним работать:

1. Удаляем предыдущие данные из выбранного диапазона

Range("D2:D" & Cells(Rows.Count, "D").End(xlUp).Row).Select Selection.ClearContents

D2 – первая ячейка выделяемого диапазона

D" – адрес последней колонки в выделенном диапазоне

Cells(Rows.Count, "A").End(xlUp).Row) – адрес (номер) последней ячейки диапазона

Select – оператор выбора (выделения) диапазона

Selection – функция, указывающая, что действие происходит с выделенным диапазоном

ClearContents – действие, производимое с диапазоном. В данном примере - это удаление (очистка)

2. Протягивание (автозаполнение) новой формулы:

[D2].Resize(Cells(Rows.Count, "A").End(xlUp).Row-1, 1).FormulaR1C1 = "= "

[D2] – в квадратных скобках указываем ячейку, с которой начинается протяжение формулы

Resize(Cells(Rows.Count, "A").End(xlUp).Row - 1, 1)

- в блоке (Rows.Count, "A") указываем столбец, по которому идёт подсчёт количества строк после начальной, на длину которой будет протянута формула.

- значение -1 показывает сколько строк не будет учтено в подсчёте. Например, это могут быть строки заголовка таблицы. В подсчёте участвуют и пустые строки.

- значение 1 (перед закрывающейся скобкой) показывает сколько столбцов будет заполняться формулой

FormulaR1C1 = "= " – после знака равно, прописываем/вставляем необходимую формулу, которую необходимо протянуть. В случае с примером, мы перемножаем две предыдущие ячейки слева от текущей (D) с записью формулы в неё.