Я пытаюсь динамически заполнить формулу. Я имею в виду, без указания точного диапазона.
Я знаю, где я нахожусь в Excel. Это означает, что мы можем использовать ActiveCell. Я только что заполнил ActiveCell (AD24) формулой (более подробную информацию см. на снимке экрана ниже). Теперь я хочу, чтобы его перетащили до AD12. Но без явного указания AD12, поскольку файл развивается и в будущем он может стать длиннее. Вот код, который я использую сейчас. Но у него есть AD12 и AD24, которые являются фиксированными значениями, а не динамическими.
Есть ли способ просто заполнить формулу до той строки (верхнее направление), которая заполнена в столбце слева от ячейки, в которой я нахожусь?
ActiveCell.FormulaR1C1 = "=IFERROR(RC[-2]/RC[-3]-1,""-"")"
Selection.AutoFill Destination:=Range("AD12:AD24"), Type:=xlFillDefault
Встроенный порядок вычислений Excel — сверху вниз, слева направо. Да, Excel может рассчитать любую ячейку из любой позиции, но схема работает сверху слева направо и поддерживается встроенными инструментами.
Наполнения нет в наборе инструментов. Заполнение легко осуществляется двойным щелчком мыши по ручке заполнения.
Обычно новые данные вводятся внизу таблицы, а не вверху.
Если вы будете придерживаться этих принципов, вам не придется расширять формулу вверху листа.
Мой совет — работать с Excel так, как он предназначен, а не противоречить его потоку вычислений.
Я не уверен, что правильно понял, но похоже, что у вас есть столбец с динамическим количеством строк, и вы хотите заполнить соседний столбец формулой, основанной на этом количестве строк.
В этом примере я хочу применить формулу в желтом столбце ко всем строкам на основе левого столбца:
Вам необходимо знать хотя бы одну начальную ячейку. В этом случае я знаю, что мои данные всегда будут начинаться с ячейки C6. Я не знаю, сколько строк, но код справится с этим:
Sub test()
Dim LR As Long
Dim StartingCell As Range
Dim MyFormula As String
Set StartingCell = Range("C6")
LR = StartingCell.End(xlDown).Row
'fill column to the right with formula
MyFormula = "=RC[-1]*100"
With StartingCell
Range(.Offset(0, 1), .Offset(LR - .Row, 1)).FormulaR1C1 = MyFormula
End With
Set StartingCell = Nothing
End Sub
После выполнения кода получаю следующее:
Код будет работать, даже если количество строк является динамическим, но должно быть последовательным (без пробелов). Если у вас есть заготовки, вам нужен другой подход.
Этот код генерирует следующий результат:
Активная ячейка — это ячейка с формулой. Это можно установить либо вручную, либо в начале кода. Когда код работает, активной ячейкой должна быть ячейка с формулой.
Он проверяет верхнюю строку столбца слева со смежными данными.
Сгенерируйте диапазон в виде текста из адреса активной ячейки и верхней строки данных,
а затем с помощью FillUp скопируйте формулу.
Sub formulaup()
toprow = ActiveCell.Offset(0, -1).End(xlUp).Row
acadd = ActiveCell.Address
rownum = Mid(acadd, InStr(InStr(1, acadd, "$") + 1, acadd, "$") + 1)
newadd = Replace(acadd, rownum, toprow) & ":" & acadd
Range(newadd).FillUp
End Sub
Оригинальный контент
После запуска кода
Вы ищете код, который будет работать независимо от того, какая ячейка активна, и будет просто «заполняться» из этой ячейки на основе ячеек слева от нее? Если да, то это должно работать:
With ActiveCell
numofrows = .Row - .Offset(, -1).End(xlUp).Row - 1
.Offset(-numofrows).Resize(numofrows + 1).FormulaR1C1 = "=IFERROR(RC[-2]/RC[-3]-1,""-"")"
End With
Примечание. Это изменено на основе верхней строки, включая заголовок.
Я могу находиться (динамически со смещением/поиском) в AD12 и хочу заполнить формулу до AD24. Как это сделать динамически, если AC12–AC24 уже заполнены? Но предположим, я не знаю, в какой ячейке нахожусь, но курсор стоит на AD12. Какой будет код для заполнения формулы в вопросе?