2013-05-12 55 views
0

比方说,我在单元格A1中有一个开始日期,在单元格A2中有一个结束日期。我将如何生成一个以A1开始的日期列表,然后跳过2周(不是14天,而是2周)。但是,这些星期必须恰好落在每个月的第15和第1天。这里有一个例子:生成日期列表

Cell A1 -> January 1, 2013 
Cell A2 -> April 30, 2013 

宏将生成日期如下:

January 1, 2013 
January 15, 2013 
February 1, 2013 
February 15, 2013 
March 1, 2013 
March 15, 2013 
April 1, 2013 
April 15, 2013 

提前感谢所有帮助!

+0

我真的不明白你想要做什么。每个月的第一天和第十五天写出结束日期? – 2013-05-12 18:09:24

+0

正确,那就是我要找的。 – 2013-05-12 18:45:06

+0

你想要单元格中的日期,还是仅仅在VBA数组中? – 2013-05-12 19:26:50

回答

2

这应该做到这一点:

Sub GenerateDates() 

Dim FirstDate As Date 
Dim LastDate As Date 
Dim NextDate As Date 

FirstDate = Range("A1").Value 
LastDate = Range("a2").Value 

NextDate = FirstDate 
Range("B1").Select 

Do Until NextDate >= LastDate 

    ActiveCell.Value = NextDate 
    ActiveCell.Offset(1, 0).Select 

    If Day(NextDate) = 1 Then 
     NextDate = DateAdd("d", NextDate, 14) 
    Else 
     NextDate = DateAdd("d", NextDate, 20) 
     NextDate = DateSerial(Year(NextDate), Month(NextDate), 1) 
    End If 

Loop 

结束子

+0

如果这个宏是本月的第一个,每次增加14天,否则增加20天(任意数量)确保我们在接下来的一个月内,然后在本月的第一天。 – 2013-05-12 18:36:47

+0

由于Activate和Select通常不鼓励在VBA中使用,除非绝对必要,我鼓励您在不使用这两种操作的情况下对其进行编码。 – 2013-05-12 19:29:05

+1

关于这个宏运行的时间量,它没有任何区别。但是,您可以设置单元格(RowNumber,ColNumber)的值,而不必在每次通过循环时递增RowNumber。 – 2013-05-13 07:19:19

1

手工作业少量但它可以完成作为细胞公式。如果B1=a1然后B2是:

=if(day(b1)=1, date(year(b1),month(b1),15), date(year(b1),month(b1)+1,1)) 

现在的体力劳动,这拖动单元格公式下保持相对单元格引用,直到达到所需的日期。然后根据需要粘贴值。