【问题标题】:Subtraction of Dates using macros使用宏减去日期
【发布时间】:2018-03-14 15:02:23
【问题描述】:

在 myexcel 中,我想计算单元格中的单个日期与列 AS2:AS400 中的一系列日期之间的天数差异

还有天数的差异,我希望它在一个单独的列中。

我试图通过记录宏来理解代码并将其修改为两行代码。但我无法做到。任何人都可以将以下代码简化为简化程序。这样我就可以大量使用了。很容易将数据放在一列中,而不是为每个单元格编写数据。

Range("AS2").Select
ActiveCell.FormulaR1C1 = "=R[3]C[-42]-RC[-22]"
Range("AS3").Select
ActiveCell.FormulaR1C1 = "=R[2]C[-42]-RC[-22]"
Range("AS4").Select
ActiveCell.FormulaR1C1 = "=R[1]C[-42]-RC[-22]"
Range("AS5").Select
ActiveCell.FormulaR1C1 = "=RC[-42]-RC[-22]"
Range("AS6").Select
ActiveCell.FormulaR1C1 = "=R[-1]C[-42]-RC[-22]"
Range("AS7").Select
ActiveCell.FormulaR1C1 = "=R[-2]C[-42]-RC[-22]"
Range("AS8").Select
ActiveCell.FormulaR1C1 = "=R[-3]C[-42]-RC[-22]"   

【问题讨论】:

  • 示例:BA2=C5-AS2; BA3=C5-AS3; BA4=C5-AS4; BA5=C5-AS5
  • 只是因为我看到你使用了很多.Select,这是一种不好的做法,应该避免。你可能会阅读How to avoid using Select in Excel VBA,你的代码风格和性能会变得更好。
  • 其实我是初学者。这是来自 Record Micro 的代码。我无法完全修改成一个完整的程序。
  • 没关系,只是建议阅读,尤其是对于初学者。 (你看到下面编辑的答案了吗?)

标签: excel vba


【解决方案1】:

看看DateDiff Function的文档:

例如:

Range("BA2").Value = DateDiff("d", Range("C5").Value,  Range("AS2").Value)

... 将 C5 和 AS2 的天数差返回到 BA2。


但您也可以不使用 VBA:

将下面的公式代入BA2=DAYS(C5,AS2)得到天数的差异。


或者您可以使用 VBA 将该公式写入单元格:

Range("BA2").Formula = "=DAYS(C5,AS2)"

在循环中编写多个公式:

Dim i As Long
For i = 2 to 5
    Range("BA" & i).Formula = "=DAYS(C5,AS" & i &")"
Next i

或者最好只写第一个单元格并将其复制下来

Range("BA2").Formula = "=DAYS($C$5,AS2)" 'write first formula
Range("BA2").AutoFill Destination:=Range("BA2:BA5"), Type:=xlFillDefault 'copy it down until BA5

注意$C$5 是一个固定单元格,但AS2 会在您向下复制时动态调整。

【讨论】:

  • @peh 但目标不仅仅是 BA2。它适用于一系列细胞。示例:BA2=C5-AS2; BA3=C5-AS3; BA4=C5-AS4; BA5=C5-AS5
  • @sheela 看到我的编辑。可能最后一个是适合你的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-09
  • 2012-08-21
  • 1970-01-01
  • 2022-01-21
  • 2015-08-04
相关资源
最近更新 更多