在我的工作表中,我有2个单元格,用于表示最小日期和最大日期。同样在工作表中,我有一个表结构。我想要实现的是,在表格的末尾附加额外的列,显示这两个日期之间的每个月,包括在内。
例如,最短日期为2014年7月31日,最长日期为2015年6月30日。我想要一个宏来填充列标题7/31 / 2014,8 / 31/2014,...,2015年6月30日到我的表的末尾。
不幸的是,Excel表格不能包含动态标题。然后我考虑通过使用日期数组来使用VBA,然后将Range.Value设置为数组,但无法弄清楚如何编写它。
谢谢。
答案 0 :(得分:1)
你想要DateAdd()
假设您想要获取每个月的最后日期,您应该使用DateSerial()
Public Sub test()
Dim startDate As Date
Dim endDate As Date
Dim currentDate As Date
startDate = CDate("7/31/2014")
endDate = CDate("6/30/2015")
currentDate = startDate
Do While currentDate <= endDate
MsgBox currentDate
'currentDate = DateAdd("m", 1, currentDate)
currentDate = DateSerial(Year(currentDate), Month(currentDate) + 2, 0)
Loop
End Sub
答案 1 :(得分:1)
你真的不需要VBA。一个非常简单的Excel公式可以解决问题。
在下面的示例中,单元格C5具有=$C$2
。 Cell C6具有以下公式:
=IF(C5>=$C$2,"",DATE(YEAR(C5),MONTH(C5)+2,DAY(0)))
并且,出于本示例的目的,它被复制到单元格C23。您只需要在最长的可想象的表格中将其复制到最远的位置。
说明:公式在上一个日期增加了2个月,但接着是当月的“第0天”,相当于前一个月的最后一天(根据您的示例,我认为这是您想要的)。如果前一个日期已达到最大值,那么它只会从那时开始写一个空字符串""
。
也许你想要连续而不是列;这个想法是一样的。
答案 2 :(得分:0)
VBA具有处理日期的功能。如果你看一下链接:
http://software-solutions-online.com/2014/02/21/excel-vba-working-with-dates/
它将向您展示如何使用VBA创建数据类型Date的变量,这将使您很容易添加和减少月份。
之后,添加方法以创建所需的列,并添加.Name
属性来命名列。
答案 3 :(得分:0)
以下是一个基于以下内容的小例子:
以下是代码:
Sub MAIN()
Dim d1 As Date, d2 As Date, Tbl As Range
d1 = Range("A1").Value
d2 = Range("A2").Value
Set Tbl = Range("B3:E9")
Call setLabels(d1, d2, Tbl)
End Sub
Sub setLabels(dt1 As Date, dt2 As Date, rng As Range)
Dim rToFill As Range, r As Range
Set rToFill = Intersect(rng(1).EntireRow, rng).Offset(-1, 0)
For Each r In rToFill
dv = dt1 + i
r.Value = dv
i = i + 1
If dt1 + i > dt2 Then Exit Sub
Next r
End Sub
这是基于 1天增量。如果您想要 1个月增量,请将其用于 dv
dv = DateSerial(Year(dt1), Month(dt1) + i, Day(dt1))