查找给定日期范围内的工作日/周末数

Posted

技术标签:

【中文标题】查找给定日期范围内的工作日/周末数【英文标题】:Find number of weekdays/weekends in a given date range 【发布时间】:2012-02-05 17:47:53 【问题描述】:

我正在尝试使用 Access VBA 查找一些 VBA 代码来确定给定日期范围内的工作日和周末天数。

例如:

Begin Date - 1/1/2012
End Date - 1/31/2012

结果应该是:

Week days - 22
Weekend days - 9

有人可以帮忙吗?

【问题讨论】:

可以使用NETWORKDAYS功能吗?伪代码:TotalDays 通过两个日期的 Datediff 在两个日期上运行 NETWORKDAYS 函数,从 Totaldays 减去工作日为周末。 NETWORKDAYS 函数是一个很有价值的 Excel 工作表函数,但它在 VBA 中不存在。 【参考方案1】:

这两个函数会计算工作日和周末的天数:

Function NumWeekendDays(dBegin As Date, dEnd As Date) As Long
    Dim iPartial As Integer
    Dim lBeginDay As Long
    Dim lNumWeekendDays As Long

    iPartial = DateDiff("d", dBegin, dEnd + 1) Mod 7
    lBeginDay = 6 - DatePart("w", dBegin, vbMonday)

    lNumWeekendDays = (DateDiff("d", dBegin, dEnd + 1) \ 7) * 2
    If iPartial > 0 And lBeginDay - iPartial < 0 Then
        If lBeginDay = -1 Then
            lNumWeekendDays = lNumWeekendDays + 1
        ElseIf iPartial - lBeginDay = 1 Then
            lNumWeekendDays = lNumWeekendDays + 1
        Else
            lNumWeekendDays = lNumWeekendDays + 2
        End If
    End If

    NumWeekendDays = lNumWeekendDays

End Function

Function NumWeekDays(dBegin As Date, dEnd As Date) As Long
    NumWeekDays = DateDiff("d", dBegin, dEnd + 1) - NumWeekendDays(dBegin, dEnd)
End Function

注意:我发现通过计算 lBeginDay 变量来计算部分周周末天数最简单,因此如果开始日期是星期一,lBeginDay == 5... 如果开始日期是星期五,lBeginDay == 1,等等。其他变体也应该起作用。

【讨论】:

此示例代码中存在错误。如果结束日期是星期五,则返回 2。 “如果 iPartial > 0 And lBeginDay - iPartial 0 And lBeginDay - iPartial @Brad- 我修复了这个错误。谢谢!

以上是关于查找给定日期范围内的工作日/周末数的主要内容,如果未能解决你的问题,请参考以下文章

VBA - 删除不在给定日期范围内的数据

Java工作日计算工具类

如何查找两天之间的数据但不包括周末的数据

jQuery Datepicker - 将范围限制为提前 7 个工作日(不包括周末)

Laravel Eloquent 在 JSON 列中查找日期在某个范围内的所有记录

如何在没有周末的情况下获取日期范围之间的所有日期?