我相信我已經找到了一個相當防彈方法計算10個工作日截止日是佔了節假日和週末。 1)計算2週週期是否爲星期一,如果是,則只添加11天(假設開始日計爲10天期的第1天)。否則,您將在13個工作日內加上兩個週末(請記住,開始日期已計爲第1天;如果您沒有將開始日期計爲第1天,則您的變量爲12和14)。 2)爲每個假期創建一個唯一的計算列,如果假期落在範圍內,則返回值1。 3)通過在開始日期添加值(週末和假日)來確定您的「總日期」。 4)確定你的總日期是否在星期六或星期日,如果是,則返回適當的天數推遲到星期一。 5)添加所有周末,假期,並將星期六和星期值添加到您的開始日期,從而爲您提供截止日期。
注意:我在這裏看到的唯一挑戰是如果一個假期推遲到週末的到期日,然後推遲到一個星期一,恰好是另一個假期。這在我的假期時間表中沒有發生,但它可能在你的。此外,每年都需要不斷添加新的假期,因此需要從頭開始重新創建列陣列以獲得長時間運行的列表。或者,你可以每年開始一個新的列表。
C_Wknd =IF(TEXT(WEEKDAY([Complaint Created On]),"ddd")="Mon",11,13)
C_NYDay =IF(AND([Complaint Created On]<=DATE(2009,1,1),([Complaint Created On])+C_Wknd>=DATE(2009,1,1)),"1","0")
C_MLKDay =IF(AND([Complaint Created On]<=DATE(2009,1,19),([Complaint Created On])+C_Wknd>=DATE(2009,1,19)),"1","0")
C_MemDay =IF(AND([Complaint Created On]<=DATE(2009,5,25),([Complaint Created On])+C_Wknd>=DATE(2009,5,25)),"1","0")
C_PresDay =IF(AND([Complaint Created On]<=DATE(2009,2,16),([Complaint Created On])+C_Wknd>=DATE(2009,2,16)),"1","0")
C_IndDay =IF(AND([Complaint Created On]<=DATE(2009,7,4),([Complaint Created On])+C_Wknd>=DATE(2009,7,4)),"1","0")
C_LabDay =IF(AND([Complaint Created On]<=DATE(2009,9,7),([Complaint Created On])+C_Wknd>=DATE(2009,9,7)),"1","0")
C_ColDay =IF(AND([Complaint Created On]<=DATE(2009,10,12),([Complaint Created On])+C_Wknd>=DATE(2009,10,12)),"1","0")
C_VetDay =IF(AND([Complaint Created On]<=DATE(2009,11,11),([Complaint Created On])+C_Wknd>=DATE(2009,11,11)),"1","0")
C_ThxDay =IF(AND([Complaint Created On]<=DATE(2009,11,26),([Complaint Created On])+C_Wknd>=DATE(2009,11,26)),"1","0")
C_XmsDay =IF(AND([Complaint Created On]<=DATE(2009,12,25),([Complaint Created On])+C_Wknd>=DATE(2009,12,25)),"1","0")
C_GrossDte =[Complaint Created On]+C_Wknd+C_NYDay+C_MLKDay+C_MemDay+C_PresDay+C_IndDay+C_LabDay+C_ColDay+C_VetDay+C_ThxDay+C_XmsDay
C_EndSat =IF(TEXT(WEEKDAY(C_GrossDte),"ddd")="Sat",2,0)
C_EndSun =IF(TEXT(WEEKDAY(C_GrossDte),"ddd")="Sun",1,0)
Resolution Due =C_GrossDte+C_EndSat+C_EndSun
所以它大部分是14天,但有處理問題的假期。 – MrChrister 2008-11-20 19:29:34