2014-02-13 248 views
3

以前我發現由Andy Brown完成的一些VBA代碼生成一個列表並使每個日期成爲另一個用戶的第一個或第15個日期。我試圖根據需要調整此代碼,但我很掙扎。目前,代碼一旦運行,只是一遍又一遍地放入相同的日期,我必須結束Excel。生成給定開始日期和結束日期的日期列表

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 

上的代碼,我根據我的模型在上面列出我的,最有可能的可怕的代碼,下面是:

Sub GenerateDates() 

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

FirstDate = Range("startdate").Value 
LastDate = Range("enddate").Value 

NextDate = FirstDate 
Range("tripdays").Select 
'selection of columns within one row 
Do Until NextDate >= LastDate 

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

    If Day(NextDate) = 1 Then 
     NextDate = DateAdd("d", NextDate, 14) 

    End If 

Loop 

End Sub 

我需要的反而是產生之間每日期給定開始日期和結束日期,而不僅僅是第15和第1日。這是如何完成的?

+0

你究竟需要什麼?我們不知道你想用他的代碼做什麼。如果你主要調整它到你命名的範圍,那麼你不必從他的代碼中移除Else塊。加入並適應您的範圍。 :) – Manhattan

+0

不是每個日期由1日和15日我所要的輸出是範圍之間的每一個日期,以便分離: 開始日期= 2014年1月1日 結束日期= 2014年1月6日 輸出= 1/1/2014 1/2/2014 1/3/2014 1/4/2014 1/5/2014 1/6/2014 .....另外,我該如何正確地做灰色像你那樣的代碼在那裏?我在一週前從字面上開始使用VBA,所以我希望能夠學習並能夠爲其他人做出貢獻。 – Chardo

+0

現在好了。在下面修改我的答案。等一下。 – Manhattan

回答

4

編輯:

這顯然是你需要什麼,在評論中討論。

Sub GenerateDates() 

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

FirstDate = Range("startdate").Value 
LastDate = Range("enddate").Value 

NextDate = FirstDate 
Range("tripdays").Select 
'selection of columns within one row 
Do Until NextDate > LastDate 

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

Loop 

End Sub 

或者,For循環也可以。

截圖:

enter image description here

進一步編輯:

橫版的要求。

Sub GenerateDatesH() 

Dim FirstDate As Date 
Dim LastDate As Date 
Dim NextDate As Date 
Dim DateOffset As Range 
Dim DateIter As Date 

FirstDate = Range("startdate").Value 
LastDate = Range("enddate").Value 
Set DateOffset = Range("tripdays") 

For DateIter = FirstDate To LastDate 
    DateOffset.Value = DateIter 
    Set DateOffset = DateOffset.Offset(0, 1) 
Next DateIter 

End Sub 

截圖:

enter image description here

注:我也固定在豎版停在提供的結束日期。

+0

非常感謝你!我還有兩個問題,我覺得對你來說非常容易。有沒有辦法讓輸出水平而不是向下排列?另外,有沒有辦法讓最後的日期成爲結束日期? – Chardo

+0

可行。等一下,我會添加一個變體。 :) – Manhattan

+0

@ user3297480:請參閱** Further Edit **中的代碼。 – Manhattan

1

避免在代碼中使用選擇它是非常低效的:)

Sub p() 
Dim FirstDate As Date 
Dim LastDate As Date 
Dim NextDate As Date 
Dim r As Long 
FirstDate = Range("A1").Value 
LastDate = Range("a2").Value 
r = 1 
Do 
FirstDate = FirstDate + 1 
Cells(r, 2) = FirstDate 
r = r + 1 
Loop Until FirstDate = LastDate 
End Sub 

做在一個行替換細胞(R,2)細胞(1,r)和啓動R = 2

相關問題