VBA:如何创建循环更改日期

时间:2017-11-13 20:03:35

标签: excel vba excel-vba

我有一张数据表,其中每行已被复制并粘贴三次。每行在S列中都有一个日期。在这三个组中,第一行将保持原始日期,第二行将比原始日期晚一个月,第三行将在原始日期之后两个月。

如何将其转换为重复整个工作表流程的循环?我的问题在于DateAdd功能。我在该函数上遇到编译错误(之前从未使用过)。提前致谢!这是我到目前为止的代码:

Sub DateChange()


Dim r As Long

Application.ScreenUpdating = False

For r = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
With Cells(r, 1).EntireRow
    .Copy
    .Resize(2).Offset(1, 0).Insert Shift:=xlDown
End With
Cells(r + 1, "S").Value = DateAdd("m", 1, Cells(r, "S"))
Cells(r + 2, "S").Value = DateAdd("m", 2, Cells(r, "S"))
Next r

Application.ScreenUpdating = True
End Sub

2 个答案:

答案 0 :(得分:0)

以下是DateAdd的替代方法,由于目前未知的原因而出错。

Sub Macro()

Dim r As Long, d As String

Application.ScreenUpdating = False

For r = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
    With Cells(r, 1).EntireRow
        .Copy
        .Resize(2).Offset(1, 0).Insert Shift:=xlDown
    End With
    d = Cells(r, "S").Address
    Cells(r + 1, "S").Value = Evaluate("date(year(" & d & "),month(" & d & ")+1,day(" & d & "))")
    Cells(r + 2, "S").Value = Evaluate("date(year(" & d & "),month(" & d & ")+2,day(" & d & "))")
Next r

Application.ScreenUpdating = True

End Sub

答案 1 :(得分:-1)

假设您的代码有效:

Sub DateChange()
    For r = 3 To 1000 Step 3
        Sheets("NameOfYourSheet").Range("S" & r) = "=DATE(YEAR(R[-1]C),MONTH(R[-1]C)+1,DAY(R[-1]C))"
        Sheets("NameOfYourSheet").Range("S" & r).AutoFill Destination:=Range("S3:S4"), Type:=xlFillDefault
    Next r
End Sub