Как заполнить формулу Excel динамически, в верхнем направлении?

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

Я знаю, где я нахожусь в Excel. Это означает, что мы можем использовать ActiveCell. Я только что заполнил ActiveCell (AD24) формулой (более подробную информацию см. на снимке экрана ниже). Теперь я хочу, чтобы его перетащили до AD12. Но без явного указания AD12, поскольку файл развивается и в будущем он может стать длиннее. Вот код, который я использую сейчас. Но у него есть AD12 и AD24, которые являются фиксированными значениями, а не динамическими.

Есть ли способ просто заполнить формулу до той строки (верхнее направление), которая заполнена в столбце слева от ячейки, в которой я нахожусь?

ActiveCell.FormulaR1C1 = "=IFERROR(RC[-2]/RC[-3]-1,""-"")"
Selection.AutoFill Destination:=Range("AD12:AD24"), Type:=xlFillDefault

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
0
54
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Встроенный порядок вычислений Excel — сверху вниз, слева направо. Да, Excel может рассчитать любую ячейку из любой позиции, но схема работает сверху слева направо и поддерживается встроенными инструментами.

Наполнения нет в наборе инструментов. Заполнение легко осуществляется двойным щелчком мыши по ручке заполнения.

Обычно новые данные вводятся внизу таблицы, а не вверху.

Если вы будете придерживаться этих принципов, вам не придется расширять формулу вверху листа.

Мой совет — работать с Excel так, как он предназначен, а не противоречить его потоку вычислений.

Я могу находиться (динамически со смещением/поиском) в AD12 и хочу заполнить формулу до AD24. Как это сделать динамически, если AC12–AC24 уже заполнены? Но предположим, я не знаю, в какой ячейке нахожусь, но курсор стоит на AD12. Какой будет код для заполнения формулы в вопросе?

ZelelB 18.07.2024 14:48
Ответ принят как подходящий

Я не уверен, что правильно понял, но похоже, что у вас есть столбец с динамическим количеством строк, и вы хотите заполнить соседний столбец формулой, основанной на этом количестве строк.

В этом примере я хочу применить формулу в желтом столбце ко всем строкам на основе левого столбца:

Вам необходимо знать хотя бы одну начальную ячейку. В этом случае я знаю, что мои данные всегда будут начинаться с ячейки 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

Примечание. Это изменено на основе верхней строки, включая заголовок.

Другие вопросы по теме