Как автоматически заполнить формулу для известного количества столбцов, но с переменным количеством строк в макро Excel

#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».

Отличные ребята — ваша помощь позволила мне получить именно то, что я хотел. Спасибо