首页 > 解决方案 > 列减法按钮

问题描述

我有一段代码使用 SQL 的 select 语句来生成基于特定日期范围的数据。它工作正常,做我想要的。其中两列是我的问题,即 F 和 H。F 是付款金额,H 是余额。在这种情况下,假设 G 是花费的金额(即支付金额与余额之间的差额)。我想要做的是在查询运行之后,我得到 x 数量的条目,如果我在每一行中按下按钮 F 减去相应的 H 是同一行,结果进入 G 列

Sub Button1_Click()
Range("G11").End(xlDown).Formula = Range("F11").End(xlDown).Value - Range("H11").End(xlDown).Value
End Sub

SQL 开始在第 12 行插入数据,因此我有 G11.End(xlDown)。

基本上我希望的是,如果数据在 F/H 的第 12 行并且是 8,3,并且在第 20 行,就像 13,5,那么第 12 行和第 20 行中的 G 将是 5 和 9

标签: excelvba

解决方案


您可以将单个公式粘贴到一个范围内,前提是您使用动态、非固定 ($) 表示法编写它,以便它将在整个过程中使用等效的行/列,以便:

dim lr as long
lr = cells(rows.count,"F").end(xlup).row 'finds the last row in column F
range(cells(12,"G"),cells(lr,"G")).formula = "=F12-H12" 'note that the formula destination and the source data start on 12

如果您预见到第 11 行的更改,或者只是想让以后更容易修复,您可以执行以下操作:

dim lr as long, r as long
r = 12 'can change this, or make in inputbox... 
lr = cells(rows.count,"F").end(xlup).row 'finds the last row in column F
range(cells(r,"G"),cells(lr,"G")).formula = "=F" & r & "-H" & r

Edit1:将所有 11 更改为 12


Edit2: 将处理工作表问题(仅使用第二个代码,因为将来更容易修改):

With Sheets("Report")
    dim lr as long, r as long
    r = 12 'can change this, or make in inputbox... 
    lr = .cells(.rows.count,"F").end(xlup).row 'finds the last row in column F
    .range(.cells(r,"G"),.cells(lr,"G")).formula = "=F" & r & "-H" & r
End With

我复制/粘贴了我最初提供的每个代码,并验证了它们在与模块关联时是否有效。


推荐阅读