For-Next Loop使用月末date作为迭代

我目前有一个“For Next”循环遍历不同的年份,我想修改它来循环date,特别是每个月的结束。 下面是我年度循环的通用代码。 清楚地循环遍历数年是相对容易的,因为你有一个开始年,这是一个整数,迭代是1.现在我想修改循环来遍历月份date的各个月末。 例如,2003年1月31日,2/28/2003,……,12/31/2007。 另外,请注意,对于每次迭代,我创build一个新的工作表,其当前迭代的名称作为工作表的名称。 同样,这一年相对容易,但使用“/”date使事情复杂化。 有没有人有任何想法使用月末date创build循环以及使用date创build工作表? 我确实有一个数组的date,所以代码可以引用表中的数组。 而表单的名称可以是任何格式。 例如,“mm-dd-yyyy”。

Sub YearLoop() Dim FirstYr As Integer Dim LastYr As Integer Dim Sheetname As String Dim Counter1 As Single FirstYr = Sheets("Model").Range("ax15").Value LastYr = Sheets("Model").Range("ax16").Value Counter1 = 0 For J = FirstYr To LastYr Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = J Sheetname = J 'do stuff Counter1 = Counter1+1 Next End Sub 

DateSerial函数产生上个月的月末date,当你给一天中的任何一个月零。

 dim m as integer for m = 2 to 13 debug.print dateserial(2016, m, 0) next m 

表名中不能使用的字符是ASCII \/[]*:? ,但你可以使用Unicode字符,如⁄∕/

 d = #1/31/2003# While d <= #12/31/2007# Sheets.Add(, ActiveSheet).Name = Replace(d, "/", ChrW(8260)) d = d + 32 d = d - Day(d) Wend 

更新

或者你可以用Jeeped的回答如下:

 For m = FirstYr * 12 + 2 To LastYr * 12 + 13 Sheets.Add(, ActiveSheet).Name = Replace(DateSerial(0, m, 0), "/", ChrW(8260)) Next 

Public Sub ReadAndDisplay()

 ' Get Range Dim rg As Range Set rg = ThisWorkbook.Worksheets("Returns Calc").Range("C118:C319") ' Create dynamic array Dim Arr() As Variant ' Read values into array from sheet1 Arr = rg For Each mark In Arr Dim CurrentDate1 As Date, DimCurrentDate2 As String CurrentDate1 = mark CurrentDate2 = Replace(CurrentDate1, "/", ".") Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = CurrentDate2 & " Rtns" 'do Stuff Next mark 

结束小组