【发布时间】:2017-07-21 02:05:07
【问题描述】:
我想创建一个表格,其中有一列包含一个日期范围内所有工作日的日期。我在 excel-vba(有效)中实现了一些代码,如下所示:
主要
Sub columnofworkdaystest()
'init
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
ws.Range("A2").Value = "Date"
'Set the table
ws.ListObjects.Add(xlSrcRange, Range("A2:A4"), , xlYes).Name = "table1"
Dim hcrtbl As ListObject
Set hcrtbl = ws.ListObjects("table1")
'get dates
Dim startdate, enddate, runningdate As Date
startdate = Date - 20
enddate = Date
runningdate = startdate
'insert rows - this part is really slow
ws.Range("A2").Offset(1, 0).Value = runningdate
Do While runningdate <= enddate
hcrtbl.ListColumns("Date").DataBodyRange(hcrtbl.ListRows.Count - 1, 1).Value = runningdate
hcrtbl.ListRows.Add
runningdate = GetNextWorkDay(runningdate)
Loop
End Sub
获取下一个工作日
'I copied this from here: http://www.nullskull.com/q/10252552/find-next-working-day-vba.aspx
Function GetNextWorkDay(dtTemp As Date)
GetNextWorkDay = dtTemp + IIf(Weekday(dtTemp) > 5, 9 - Weekday(dtTemp), 1)
End Function
如果我想获得超过几个月的日期范围,当前的 do-while 循环太慢了。有什么方法可以修改它以使其更快地工作吗?
【问题讨论】:
-
当前循环对我来说需要 0.06 秒。 (插入一年需要 0.4 秒。)需要多快?
-
嗨@YowE3K,感谢您的回复。我刚刚发现使用空工作簿可以获得相同的性能,但是对于我正在处理的工作簿(在其他地方有很多数据),每次插入大约需要 0.3 秒。任何想法为什么会这样?
-
@jsotola 伙计,你就是男人!您愿意在下面的空白处发布答案以便我接受吗?