Range("K" & LastRow).Offset(5, 0).Formula = "=" & ActiveCell.Offset(0, -3).Address & "-" & ActiveCell.Offset(0 - 1).Address
Это бы сработало, но не красиво. Альтернативой может быть статическое VBA-решение, такое как ответ Дамиана.
Кроме того, я бы посоветовал вам обратиться к правильной книге и листу. Если вы пропустите это, код VBA всегда будет ссылаться на активную книгу / лист, что вам часто не нужно.
* 1006 Е.Г. *
With Workbooks(REF).Sheets(REF)
.Range("K" & LastRow).Offset(5, 0).Formula = "=" & ActiveCell.Offset(0, -3).Address & "-" & ActiveCell.Offset(0 - 1).Address
End With
Кроме того, обращение к активной ячейке также вызывает проблемы. Возможно, вам лучше обратиться к более определенным диапазонам, таким как
With Workbooks(REF).Sheets(REF)
.Range("K" & LastRow).Offset(5, 0).Formula = "=" & .Cells(LastRow + 4, "K").Address & "-" & .Cells(LastRow, "J").Offset(0 - 1).Address 'Ranges randomly chosen
End With
EDIT
Формулы являются динамическими. Другими словами, их результаты динамически изменяются в зависимости от значений / диапазонов, к которым они относятся. Если вы не закодируете событие Worksheet_Change, приведенные ниже вычисления не будут обновляться, если вы измените значения, для которых рассчитывается сумма. Однако вам не всегда нужны вычисления, чтобы быть динамическими, поэтому выберите то, что вам нужно. Я предполагаю, что у ваших столбцов есть заголовки.
With Workbooks(REF).Sheets(REF)
LastRow = .Cells(.Rows.Count, "K").End(xlUp).Row
LROWJ = .Cells(.Rows.Count, "J").End(xlUp).Row
LROWH = .Cells(.Rows.Count, "H").End(xlUp).Row
.Range("K" & LastRow).Value = Application.Sum(.Range("H2:H" & LROWH)) - Application.Sum(.Range("J2:J" & LROWJ))
End With