在Excel中,通過將兩個日期值進行減運算,可以得到這兩個日期相隔的天數(shù);而將一個日期值與一個表示天數(shù)的整數(shù)相加減,則可以得到一個相隔該整數(shù)代表的天數(shù)的日期,這是Excel提供的雖然簡單卻相當實用的日期計算功能。然而,該功能在實際應用中的局限性,使其無法滿足更高層次的需要,特別是“工作日”這一概念逐漸在各領域廣泛應用,許多工作都需要進行與之相關的計算。最常見的譬如員工的出勤天數(shù)、交貨期的計算、付款日的計算等等。本文介紹了Excel自帶的用于計算工作日的NETWORKDAYS和WORKDAY函數(shù),并指出了這兩個函數(shù)在實際應用中所存在的問題,同時給出了用Excel自定義函數(shù)進行相關計算的實現(xiàn)。
Excel自帶的工作日計算函數(shù)
Excel中自帶的工作日計算函數(shù)在“分析工具庫”中,要使用該類函數(shù)必須選擇“加載宏”命令安裝“分析工具庫”。
▲NETWORKDAYS函數(shù) NETWORKDAYS函數(shù)的用途是返回兩個日期值之間完整的工作日數(shù)值,此工作日數(shù)值不包括周末(周六和周日)和用戶專門指定的假期。 1.語法形式 NETWORKDAYS(start_date,end_date,holidays) 2.參數(shù)說明 start_date :開始日期。 end_date :終止日期。 holidays :表示不在工作日歷中的一個或多個日期所構成的可選數(shù)據(jù)清單,如國家規(guī)定的法定假日以及其他非法定假日。此參數(shù)可以是包含日期的單元格區(qū)域,也可以是由代表日期的系列數(shù)所構成的數(shù)組常量。
▲WORKDAY函數(shù) WORKDAY函數(shù)是用來計算某日期(起始日期)之前或之后相隔指定工作日數(shù)的某一日期的日期值。 1.語法形式 WORKDAY(start_date,days,holidays) 2.參數(shù)說明 start_date:開始日期。 days:為 start_date之前或之后不含周末及節(jié)假日的天數(shù)。days為正值將產(chǎn)生未來日期;為負值產(chǎn)生過去日期。 holidays:為可選的數(shù)據(jù)清單,表示需要從工作日歷中排除的日期值,如國家規(guī)定的法定假日或非法定假日。此參數(shù)可以是包含日期的單元格區(qū)域,也可以是由代表日期的系列數(shù)所構成的數(shù)組常量。
用Excel自定義函數(shù)實現(xiàn)工作日計算
值得注意的是,在實際應用中,對于元旦、春節(jié)、五一、國慶等,由于節(jié)假日調整的原因,有些周末也有可能被安排為工作日,因此在計算時也應該包括在工作日內。顯然,Excel自帶的兩個工作日計算函數(shù)沒有考慮到這一點,實際計算時必然會帶來誤差。因此有必要用Excel中的VBA重新設計兩個對應的自定義函數(shù),用以準確計算工作日。為了與Excel自帶的工作日計算函數(shù)相對應,這兩個自定義函數(shù)的參數(shù)采用了與前者類似的形式。由于除周末外,其間可能還有國家法定的節(jié)假日,實際計算工作日數(shù)時要把這些節(jié)假日排除在外。為此在設計時使用了參數(shù)holidays來存放計算范圍內的所有法定節(jié)假日,并據(jù)此檢查以確定每個日期是不是工作日。另外,增加一個新的參數(shù)nonholidays,對應的是一個Excel中的區(qū)域,用以存放被調整為工作日的周末的日期,并據(jù)此檢查以確定每個日期是否非工作日。這兩個自定義函數(shù)的具體代碼如下,并以2006年春節(jié)期間的節(jié)假日為例計算此范圍內的工作日數(shù)。
|