2个date之间的月份结束date的数组

在我的工作表中,我有2个单元格用来表示最小date和最大date。 另外在工作表中,我有一个表结构。 我想要实现的是在表格末尾添加额外的列,显示在这两个date之间的每个月份。

例如,最小date是7/31/2014,最大值是6/30/2015。 我想要一个macros来填充列标题7/31/2014,8/31/2014 / …,6/30/2015到我的表的结尾。

不幸的是,Excel表格不能有dynamic标题。 然后我想通过有一个date数组使用VBA,然后将Range.Value设置为数组,但不能完全弄清楚如何编写它。

谢谢。

你想要的DateAdd()

假设你想得到每个月的最后一个date,你应该使用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 

你并不需要VBA。 一个非常简单的Excel公式将会诀窍。

在下面的例子中,单元格C5有=$C$2 。 细胞C6有这个公式:

 =IF(C5>=$C$2,"",DATE(YEAR(C5),MONTH(C5)+2,DAY(0))) 

而为了这个例子的目的,它被复制到单元格C23。 你只需要在最长的时间内尽可能地复制它就可以了。

说明:该公式将前2个月添加到前一个date,但是接下来是该月份的“第0天”,相当于前一个月的最后一天(根据您的示例,我认为这是您想要的)。 如果以前的date已经达到最大值,那么从那时起它只是写一个空string""

也许你想要这个连续,而不是一列; 这个想法是一样的。

在这里输入图像说明

这里是一个基于以下的小例子:

样品

这里是代码:

 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)) 

VBA具有处理date的函数。 如果你看看链接:

http://software-solutions-online.com/2014/02/21/excel-vba-working-with-dates/

它将向您展示如何使用VBA创build数据typesDate的variables,这将使您轻松地增加和减less几个月。

之后,添加方法来创build所需的列和.Name属性来命名列。