我为一个房屋建筑工人工作,我正在努力帮助一个同事获得一个可以计算3天的日期但不包括周末的公式。
DateAdd("d",3,[TrussOrderDate])
这是她正在使用的当前公式,她希望得到这个来计算日期,但不包括周末
答案 0 :(得分:3)
我会创建一个表,它将保存所有(银行/公共/特殊)假期。像(tbl_BankHolidays),
这样的东西holID | bankDate | bankHoliday | workDay
--------+---------------+-------------------+-----------
1 | 01/01/2014 | New years day | Wednesday
2 | 18/04/2014 | Good Friday | Friday
3 | 21/04/2014 | Easter Monday | Monday
4 | 05/05/2014 | Early May | Monday
5 | 26/05/2014 | Spring holiday | Monday
6 | 25/08/2014 | Summer holiday | Monday
7 | 25/12/2014 | Christmas Day | Thursday
8 | 26/12/2014 | Boxing Day | Friday
9 | 01/01/2015 | New Year’s Day | Thursday
:
:
16 | 28/12/2015 | Boxing Day | Monday
然后是一个计算这些日期的函数。
Function addWorkDays(addNumber As Long, Date2 As Date) As Date
'********************'
'Code Courtesy of '
' Paul Eugin '
'********************'
Dim finalDate As Date
Dim i As Long, tmpDate As Date
tmpDate = Date2
i = 1
Do While i <= addNumber
If Weekday(tmpDate) <> 1 And Weekday(tmpDate) <> 7 And _
DCount("*", "tbl_BankHolidays", "bankDate = " & CDbl(tmpDate)) = 0 Then i = i + 1
tmpDate = DateAdd("d", 1, tmpDate)
Loop
addWorkDays = tmpDate
End Function
当您需要将 n 个天添加到日期时,您只需使用,类似于DateAdd函数。您没有指定字符串标识符,因为这默认为仅添加天数。然后第一个参数是要添加的天数。第二个是需要添加日期的日期。
代码工作,通过一次循环一天,检查它是否是周末(1 - vbSunday,或7 - vbSaturday),或者它是否在特殊日子列表中列出。如果是休息日或周末,请在不增加计数器的情况下添加一天。当计数器等于你传递的数字时,循环将终止!