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

时间:2016-08-29 15:11:13

标签: excel vba loops date

我目前有一个“For Next”循环,它遍历各个年份,我想修改它以循环显示日期,特别是每月结束。我的年度循环的通用代码如下。显然循环多年是相对容易的,因为你有一个开始年份,这是一个整数,迭代是1.现在我想修改循环迭代虽然各个月末日期。例如,2003年1月31日,2/28/2003,......,2007年12月31日。另请注意,对于每次迭代,我都会创建一个新工作表,其中包含当前迭代的名称作为工作表的名称。同样,这一年相对容易,但使用带有“/”的日期使事情变得复杂。有没有人有任何关于使用月末日期创建循环以及使用日期创建工作表的想法?我有一个日期数组,所以代码可以引用工作表中的数组。表格的名称可以是任何格式。例如,“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

3 个答案:

答案 0 :(得分:7)

DateSerial function生成上个月的月末日期,当您将任何一个月的日期归零时。

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

答案 1 :(得分:1)

工作表名称中不能使用的字符是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

答案 2 :(得分:0)

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

End Sub