我目前有一个“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
答案 0 :(得分:7)
DateSerial function生成上个月的月末日期,当您将任何一个月的日期归零时。
dim m as integer
for m = 2 to 13
debug.print dateserial(2016, m, 0)
next m
答案 1 :(得分:1)
工作表名称中不能使用的字符是ASCII \/[]*:?
,但您可以使用⁄∕/
等
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