使用VBA检查单元格是否包含日期,如果是,则将日期提前一个月

时间:2017-01-17 18:06:26

标签: excel vba excel-vba

我有一列数据(C),其中包含许多包含日期的单元格。我正在尝试创建一个宏来检查每个单元格是否包含日期,如果确实如此,则按月推进日期。我有代码从这里提前一个月http://excel.tips.net/T002180_Automatically_Advancing_by_a_Month.html并且它工作正常但我不知道如何用动态范围替换范围来评估C列中的所有单元格。如果可能的话我也想消除了循环的需要。这是我到目前为止所拥有的。

{{1}}

2 个答案:

答案 0 :(得分:5)

尝试类似下面的代码(我使用DateAdd函数将1个月添加到当前日期值)

Sub IncreaseMonth()

    Dim dDate As Date
    Dim NumberofTasks As Long
    Dim x As Long

    With Worksheets("Dashboard")
        ' I suspect you want to get the last row with data in Column C
        NumberofTasks = .Cells(.Rows.Count, "C").End(xlUp).Row

        For x = 1 To NumberofTasks
            If IsDate(.Range("C" & x).Value) Then '<-- check if current cell at Column C is Date
                .Range("C" & x).Value = DateAdd("m", 1, .Range("C" & x).Value) '<-- add 1 Month to current date in Column c, use DateAdd function
            End If
        Next x

    End With

End Sub

答案 1 :(得分:1)

此代码段应该让您走上正确的轨道。我在这里做了几个假设。第一个是你有一个名为&#34; Number_of_Tasks&#34;你想要经营的。其次是该范围内的所有值都是有效日期。如果值可能是无效日期(如空白),则应在设置值之前检查此值。

您还希望确保月份不会失效。增加12月份的月份将不是有效日期。

Sub IncreaseMonth()
    Dim tempCell As Range
    For Each tempCell In ThisWorkbook.Worksheets("Dashboard").Range("Number_of_Tasks")
        tempCell.Value = DateSerial(Year(tempCell.value), Month(tempCell.value) + 1, Day(tempCell.value))
    Next tempCell