计算没有假期和周末的工作日数
Calculate Number of Working Days without Holidays & Weekends
如果不计算周六、周日和节假日,如何计算两个日期之间的工作天数。
我有一个包含以下字段的 table:
enter image description here
我有以下 table,我想要的是在名为 expr1 的列中计算工作日的差异。
将代码输入到Visual Basic中,调用workingdays模块
enter image description here
用每列的名称替换变量。
Function WorkingDays(ByVal FECHA_DE_VALIDACION_FA As Date, ByVal FECHA_IMPRESIÓN As Date) As Long
While FECHA_DE_VALIDACION_FA <= FECHA_IMPRESIÓN
Select Case True
Case Weekday(FECHA_DE_VALIDACION_FA, vbMonday) > 5
Case DCount("*", "Holidays", "Holiday = #" & Format(fromDate, "mm/dd/yyyy") & "#") > 0
Case Else: WorkingDays = WorkingDays + 1
End Select
FECHA_DE_VALIDACION_FA = FECHA_DE_VALIDACION_FA + 1
Wend
End Function
然后他们告诉我在使用生成器的查询中调用函数 Workingdays,但它没有给我结果。
enter image description here
enter image description here
我接受并 运行 查询,但出现错误。
正如 Tony 在评论中建议的那样,您首先需要构建一个包含假期日期的 table,因为这些日期每年都不同。
那么,与其使用 DateDiff
之类的函数,最简单的方法可能是递增地计算两个日期之间的天数,如果日期是星期六或星期日,则不增加计数器,或者您假期的成员 table,例如:
Function WorkingDays(ByVal fromDate As Date, ByVal toDate As Date) As Long
While fromDate <= toDate
Select Case True
Case Weekday(fromDate, vbMonday) > 5
Case DCount("*", "Holidays", "Holiday = #" & Format(fromDate, "mm/dd/yyyy") & "#") > 0
Case Else: WorkingDays = WorkingDays + 1
End Select
fromDate = fromDate + 1
Wend
End Function
以上假定您有一个名为 Holidays
的 table,其中包含一个名为 Holiday
的字段,其中排除了所有假期日期。
上述函数计算包含两个提供日期的工作日数。
例如,假设您的 Holidays
table 包含以下日期:
然后该函数将return以下内容:
?WorkingDays(#2018-12-24#, #2019-01-04#)
7
要使用代码,打开VBAIDE(Alt+F11),插入一个new Module (Alt, I, M) 然后将代码粘贴到模块中并保存模块。
然后您可以从表达式生成器可用的任何地方调用该函数。
如果不计算周六、周日和节假日,如何计算两个日期之间的工作天数。
我有一个包含以下字段的 table: enter image description here
我有以下 table,我想要的是在名为 expr1 的列中计算工作日的差异。
将代码输入到Visual Basic中,调用workingdays模块
enter image description here
用每列的名称替换变量。
Function WorkingDays(ByVal FECHA_DE_VALIDACION_FA As Date, ByVal FECHA_IMPRESIÓN As Date) As Long
While FECHA_DE_VALIDACION_FA <= FECHA_IMPRESIÓN
Select Case True
Case Weekday(FECHA_DE_VALIDACION_FA, vbMonday) > 5
Case DCount("*", "Holidays", "Holiday = #" & Format(fromDate, "mm/dd/yyyy") & "#") > 0
Case Else: WorkingDays = WorkingDays + 1
End Select
FECHA_DE_VALIDACION_FA = FECHA_DE_VALIDACION_FA + 1
Wend
End Function
然后他们告诉我在使用生成器的查询中调用函数 Workingdays,但它没有给我结果。
enter image description here enter image description here
我接受并 运行 查询,但出现错误。
正如 Tony 在评论中建议的那样,您首先需要构建一个包含假期日期的 table,因为这些日期每年都不同。
那么,与其使用 DateDiff
之类的函数,最简单的方法可能是递增地计算两个日期之间的天数,如果日期是星期六或星期日,则不增加计数器,或者您假期的成员 table,例如:
Function WorkingDays(ByVal fromDate As Date, ByVal toDate As Date) As Long
While fromDate <= toDate
Select Case True
Case Weekday(fromDate, vbMonday) > 5
Case DCount("*", "Holidays", "Holiday = #" & Format(fromDate, "mm/dd/yyyy") & "#") > 0
Case Else: WorkingDays = WorkingDays + 1
End Select
fromDate = fromDate + 1
Wend
End Function
以上假定您有一个名为 Holidays
的 table,其中包含一个名为 Holiday
的字段,其中排除了所有假期日期。
上述函数计算包含两个提供日期的工作日数。
例如,假设您的 Holidays
table 包含以下日期:
然后该函数将return以下内容:
?WorkingDays(#2018-12-24#, #2019-01-04#)
7
要使用代码,打开VBAIDE(Alt+F11),插入一个new Module (Alt, I, M) 然后将代码粘贴到模块中并保存模块。
然后您可以从表达式生成器可用的任何地方调用该函数。