#vba #excel
#vba #excel
Вопрос:
Я пишу макрос, в котором мне нужно автоматически заполнить некоторые строки формулами в нескольких столбцах.
Количество столбцов фиксировано, но при каждом запуске макроса количество строк изменяется. Я использую функцию «записать макрос», и текущий макрос заполняет мои строки только до строки 16. Ниже приведен код:
Range("D3:P3").Select
Selection.AutoFill Destination:=Range("D3:P16")
Мне, очевидно, нужно изменить «P16» на что-то динамическое.
Я попытался использовать следующее:
Dim LR As Long
LR = Range("D3:P3" amp; Rows.Count).End(xlUp).Row
Range("B3:P3").AutoFill Destination:=Range("B3:P" amp; LR)
Я не уверен, нужно ли размещать «Dim LR as Long» в самом начале моего макроса — или его можно просто разместить где угодно?
В любом случае я получаю ошибку, поскольку то, что я пытался сделать выше, выдает мне «ошибку выбора автозаполнения» (извините, я не могу вспомнить точное сообщение об ошибке.
Сможет ли кто-нибудь указать мне правильное направление?
Ответ №1:
LR может быть объявлен в любом месте до того, как вы впервые его используете, но лучше всего сделать это в начале. Ваш диапазон для LR неверен.
LR = Range("D3:P3" amp; Rows.Count).End(xlUp).Row
Должно быть
LR = Range("D3:P3").End(xlUp).Row
Вам следует использовать xlDown, если вы пытаетесь найти конец диапазона НИЖЕ D3: P3
LR = Range("D3:P3").End(xlDown).Row
Даст вам последнюю строку с данными во всех столбцах D: P в ней ниже D3: P3
Комментарии:
1. Блестяще, спасибо вам обоим за помощь. Мне удалось использовать информацию, чтобы получить именно то, что я хотел.
Ответ №2:
Я думаю, вы ищете это:
LR = Range("D3:P" amp; Rows.Count).End(xlUp).Row
но обратите внимание, что при этом будет найдена последняя строка с любым содержимым в столбце D — если есть более поздние строки с содержимым в столбцах E-P, но не в столбце D, то эти строки будут проигнорированы.
Ответ №3:
Итак, я использовал предоставленную мне информацию и сумел получить следующее:
Dim LR As Long
LR = Range("C3:P" amp; Rows.Count).End(xlDown).Row
Range("D3:P3").AutoFill Destination:=Range("D3:P" amp; LR)
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$D$2:P" amp; LR), , xlYes).Name = _
"Table10"
Это позволило мне подсчитать количество строк, которые уже были заполнены в столбце «C», а затем взять формулы, которые уже существовали в ячейках D3: P3, и автоматически заполнить их по диапазону до последней заполненной строки столбца C.
Затем я использовал эту структуру, чтобы сделать весь диапазон таблицей, в данном случае с именем «Table10».
Отличные ребята — ваша помощь позволила мне получить именно то, что я хотел. Спасибо