首页 > 解决方案 > 使用 activecell.offset 进行减法

问题描述

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

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

标签: vbaoffset

解决方案


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

这会起作用,但并不漂亮。另一种选择是静态 VBA 解决方案,例如 Damian 的回答。

此外,我建议您参考正确的工作簿和表格。如果您忽略这一点,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

推荐阅读