所以我要做的是从一个单元格中的日期开始,然后在它下面的每一行显示一个月后的日期。因此,在第1列的第3行中,我有1919年 - 3月,所以我希望第1列的第4行是1919年 - 4月,依此类推。我写了一个代码来做到这一点:
Worksheets("FormattedData").Cells(3, 1) = MinDate
Worksheets("FormattedData").Cells(3, 1).NumberFormat = "yyyy - mmm"
For i = 1 To TotalMonths
Worksheets("FormattedData").Cells(3 + i, 1) = DateAdd("m", 1, Worksheets("FormattedData").Cells(2 + i, 1))
Worksheets("FormattedData").Cells(3 + i, 1).NumberFormat = "yyyy - mmm"
Next i
其中MinDate是先前确定的日期,TotalMonths是先前确定的整数。当我这样做时,它可以正常工作,但是在第835行,它开始变得混乱。这是它出现的方式: 1988年 - 5月 1988年6月 1900年 - 1月 1900年 - 1月
然后它一直在重复1月份,然后有时它显示1900年 - 2月或1900年 - 3月,但奇怪的是,最后一行将显示2015年 - 7月,这没有意义,因为上一行的单元格是1900年 - 3月。即使我尝试使用EoMonth,我也遇到了同样的问题。
在另一个单独的工作表中,我尝试了以下代码,它在整个过程中运行良好:
Dim z As Date
z = "01/11/1905"
Worksheets(4).Cells(1, 1) = z
Worksheets(4).Cells(1, 2) = z
Worksheets(4).Cells(1, 3) = z
For i = 1 To 60000
Worksheets(4).Cells(1 + i, 1) = DateAdd("m", 1, Worksheets(4).Cells(i, 1))
Worksheets(4).Cells(1 + i, 2) = WorksheetFunction.EoMonth(Worksheets(4).Cells(i, 2), 1)
Worksheets(4).Cells(1 + i, 3) = WorksheetFunction.EoMonth(Worksheets(4).Cells(1, 3), i)
Worksheets(4).Cells(1 + i, 1).NumberFormat = "yyyy - mmm"
Worksheets(4).Cells(1 + i, 2).NumberFormat = "yyyy - mmm"
Worksheets(4).Cells(1 + i, 3).NumberFormat = "yyyy - mmm"
Next i
所有三列都具有相同的输出,并且与我希望它出现的完全相同。但是如果我在前面的代码中使用这三种通用方法,那么当它到达1988 - Jun时,我会遇到它无法正常工作的问题。有谁知道这里出了什么问题?
答案 0 :(得分:0)
答案 1 :(得分:0)
我已经尝试了1000个月的例子并且它起作用了:
1988年 - 1月
1988年 - 2月
1988年 - 3月
1988年 - 4月
1988年 - 5月
1988年 - 6月
1988年 - 7月
1988年 - 8月
1988年 - 9月
1988年 - 10月
1988年 - 11月
1988年 - 12月
您是否尝试过使用DateSerial?
Sub test()
Dim MinDate As Date
Dim TotalMonths As Long
Dim i As Long
MinDate = DateSerial(1919, 1, 1)
TotalMonths = 1000
Worksheets("FormattedData").Cells(3, 1) = MinDate
Worksheets("FormattedData").Cells(3, 1).NumberFormat = "yyyy - mmm"
For i = 1 To TotalMonths
With Worksheets("FormattedData")
.Cells(3 + i, 1) = DateSerial(Year(.Cells(3 + i - 1, 1)), Month(.Cells(3 + i - 1, 1)) + 1, 1)
.Cells(3 + i, 1).NumberFormat = "yyyy - mmm"
End With
Next i
End Sub