使用宏减去日期

时间:2018-03-14 15:02:24

标签: excel-vba vba excel

在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]"   

1 个答案:

答案 0 :(得分:0)

查看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会在您复制时动态调整。