用Excel自定義函數計算工作日1

用Excel自定義函數計算工作日

文章來源:PCM 作者:其他2006-10-20

在Excel中,通過將兩個日期值進行減運算,可以得到這兩個日期相隔的天數;而將一個日期值與一個表示天數的整數相加減,則可以得到一個相隔該整數代表的天數的日期,這是Excel提供的雖然簡單卻相當實用的日期計算功能。然而,該功能在實際應用中的局限性,使其無法滿足更高層次的需要,特別是「工作日」這一概念逐漸在各領域廣泛應用,許多工作都需要進行與之相關的計算。最常見的譬如員工的出勤天數、交貨期的計算、付款日的計算等等。本文介紹了Excel自帶的用於計算工作日的NETWORKDAYS和WORKDAY函數,並指出了這兩個函數在實際應用中所存在的問題,同時給出了用Excel自定義函數進行相關計算的實現。

Excel自帶的工作日計算函數

Excel中自帶的工作日計算函數在「分析工具庫」中,要使用該類函數必須選擇「載入宏」命令安裝「分析工具庫」。

▲NETWORKDAYS函數NETWORKDAYS函數的用途是返回兩個日期值之間完整的工作日數值,此工作日數值不包括周末(周六和周日)和用戶專門指定的假期。1.語法形式NETWORKDAYS(start_date,end_date,holidays)2.參數說明start_date :開始日期。end_date :終止日期。holidays :表示不在工作日曆中的一個或多個日期所構成的可選數據清單,如國家規定的法定假日以及其他非法定假日。此參數可以是包含日期的單元格區域,也可以是由代表日期的系列數所構成的數組常量。

▲WORKDAY函數WORKDAY函數是用來計算某日期(起始日期)之前或之後相隔指定工作日數的某一日期的日期值。1.語法形式WORKDAY(start_date,days,holidays)2.參數說明start_date:開始日期。days:為 start_date之前或之後不含周末及節假日的天數。days為正值將產生未來日期;為負值產生過去日期。holidays:為可選的數據清單,表示需要從工作日曆中排除的日期值,如國家規定的法定假日或非法定假日。此參數可以是包含日期的單元格區域,也可以是由代表日期的系列數所構成的數組常量。

用Excel自定義函數實現工作日計算

值得注意的是,在實際應用中,對於元旦、春節、五一、國慶等,由於節假日調整的原因,有些周末也有可能被安排為工作日,因此在計算時也應該包括在工作日內。顯然,Excel自帶的兩個工作日計算函數沒有考慮到這一點,實際計算時必然會帶來誤差。因此有必要用Excel中的VBA重新設計兩個對應的自定義函數,用以準確計算工作日。為了與Excel自帶的工作日計算函數相對應,這兩個自定義函數的參數採用了與前者類似的形式。由於除周末外,其間可能還有國家法定的節假日,實際計算工作日數時要把這些節假日排除在外。為此在設計時使用了參數holidays來存放計算範圍內的所有法定節假日,並據此檢查以確定每個日期是不是工作日。另外,增加一個新的參數nonholidays,對應的是一個Excel中的區域,用以存放被調整為工作日的周末的日期,並據此檢查以確定每個日期是否非工作日。這兩個自定義函數的具體代碼如下,並以2006年春節期間的節假日為例計算此範圍內的工作日數。

推薦閱讀:

多種Excel表格條件自動求和公式
第四章 Excel
Excel高效實戰應用:VBA一鍵自動匯總多表問卷調查結果(含案例下載)
移動端 Office 應用全免費,微軟的無奈之舉?
你所不知道關於Excel日期格式大變身的秘密

TAG:工作 | 計算 | 函數 | 定義 | Excel | 自定義 | 自定義函數 |