【问题标题】:Fast way to add column of workdays between date range (Excel-VBA)在日期范围之间添加工作日列的快速方法(Excel-VBA)
【发布时间】: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 伙计,你就是男人!您愿意在下面的空白处发布答案以便我接受吗?

标签: vba excel


【解决方案1】:

如果你有一个巨大的工作表...关闭自动重新计算

【讨论】:

    猜你喜欢
    • 2020-08-03
    • 1970-01-01
    • 2016-04-12
    • 2022-01-12
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 2020-04-27
    相关资源
    最近更新 更多