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