使用activecell.offset减去

时间:2019-03-19 08:06:58

标签: vba offset

我的上一排是(315)-在下面的代码中,我需要在最后一行中寻求帮助(我正在尝试做(col H的总和)-(col J的总和)-通过在col k中使用activecell-offset

''Totals''
Range("K" & LastRow).Offset(5, 0).Formula = "=activecell.offset(0,-3)-activecell.offset(0-1)"

2 个答案:

答案 0 :(得分:0)

我不知道您的最后一行如何变成315,并且您有320上的数据,但是您正在寻找这个:

Range("K" & LastRow).Offset(5, 0).Value = ActiveCell.offset(0,-3) - ActiveCell.offset(0-1)

答案 1 :(得分:0)

Range("K" & LastRow).Offset(5, 0).Formula = "=" & ActiveCell.Offset(0, -3).Address & "-" & ActiveCell.Offset(0 - 1).Address

这行得通,但不是很漂亮。一种替代方法是使用静态VBA解决方案,例如Damian的答案。

此外,我建议您参考正确的工作簿和-sheet。如果您忽略了这一点,则VBA代码将始终引用活动的工作簿/工作表,而您通常不希望这样做。

例如

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

编辑

公式是动态的。换句话说,它们的结果随它们引用的值/范围而动态变化。除非您编写一个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