【问题标题】:VBA Loops Using Subtraction使用减法的 VBA 循环
【发布时间】:2017-11-05 19:11:13
【问题描述】:

我正在尝试开发一个“for 循环”宏来计算相邻列中两个日期之间的持续时间。

我当前的代码:

Sub Enter_Formulas()

FinalRow = Cells(Rows.Count, 2).End(xlUp).Row 'Counts # of rows in the data set

For x = 5 To FinalRow

Cells(x, 10).Formula = "=I5-H5"

End Sub

这将准确返回 I5 和 H5 之间的差异,但我希望公式沿列向下流动。 (即下一行应该计算 I6 - H6 然后 I7-I8.. 等等)

任何建议将不胜感激!

【问题讨论】:

  • 只需将公式放在第一个单元格中,然后双击单元格右下角的绿色小框。 Excel 会一直自动填充公式。
  • 感谢您的回复,但此宏将支持不断更新的用户表单。我不希望最终消费者每次输入新数据时都刷新。

标签: vba excel for-loop


【解决方案1】:

我建议不要使用循环,您可以一次性自动填充整个范围:

Sub Enter_Formulas()

FinalRow = Cells(Rows.Count, 2).End(xlUp).Row 'Counts # of rows in the data set

Range(Cells(5, 10).address, Cells(FinalRow, 10).address).Formula = "=I5-H5"

End Sub

但是,如果您必须使用循环,请尝试以下操作:

For x = 5 to FinalRow
Cells(x,10).Formula = "=" & Cells(x,9).Address & "-" & Cells(x,8).Address
Next x

这样,通过连接依赖于 x 的单元格地址,它们也将每次递增一行。

【讨论】:

  • 这很完美!你能解释一下代码的“.address”部分吗?我尝试了与此类似的方法,其中定义了公式“= I5-H5”,但它在列中携带相同的值。此计算的范围部分是行引用的触发器吗?
  • 是的,跨指定范围设置的单个单元格公式将填充它,就像您将它放在一个单元格中然后在工作表上手动拖动填充一样。单元格引用的地址部分将指定地址,而不是该地址单元格中的值(例如,Cells(1,1).Address 给出 A1Cells(1,1).Value 给出单元格 A1 中的任何值。您可以将整个范围设置为以上使用以逗号分隔的单元格:Range(Cells(1,1).Address, Cells(1,5).Address) 给出Range(A1:A5) - 你应该用谷歌搜索它,它可能比我能更好地解释它:D
  • Range(Cells(5, 10).address, Cells(FinalRow, 10).address).Formula = "=I5-H5" 最好写成Range(Cells(5, 10), Cells(FinalRow, 10)).Formula = "=I5-H5" - 当语法接受单元格本身作为参数时,获取单元格的地址是没有意义的。 (而且,我怀疑,当一个地址作为参数传递时,必须发生的第一件事是它必须创建对该地址的单元格的引用——所以你可能只是在添加工作。)
  • jamheadart - 非常感谢您的帮助!很好的建议和解释
  • YowE3K - 可以这样写,但我养成了指定 .Address 与 .Value2 的习惯,因为我经常需要两者,并最终在工作中连接两者以获得特定的字符串,所以找到指定我用于代码修订的好习惯。
【解决方案2】:

如果您必须使用循环(我通常不会),您也可以这样做,方法是使用 R1C1 寻址形式:

For X = 5 To FinalRow
    Cells(X, 10).FormulaR1C1 = "=RC[-1]-RC[-2]"
Next X

如果您的工作表使用 A1 参考样式,则会得到适当的翻译。

【讨论】:

    猜你喜欢
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多