Table of contents
这个简短的教程解释了如何使用Excel的NETWORKDAYS和WORKDAY函数来计算带有自定义周末参数和假期的工作日。
Microsoft Excel提供了两个专门用于计算工作日的函数--WorkDAY和NETWORKDAYS。
ǞǞǞ 工作日 函数返回一个未来或过去N个工作日的日期,你可以用它来增加或减少给定日期的工作日。
使用 网络日 函数,你可以计算出你指定的两个日期之间的工作日数。
在Excel 2010和更高版本中,上述函数有更强大的修改,即WORKDAY.INTL和NETWORKDAYS.INTL,它们可以让你定义哪些天和多少天是周末。
现在,让我们仔细看看每个函数,看看你如何使用它来计算Excel工作表中的工作日。
Excel的WORKDAY函数
Excel的WORKDAY函数返回一个日期,该日期比开始日期提前或提前一定数量的工作日。 它不包括周末以及你指定的任何假期。
WORKDAY函数的目的是在标准工作日历的基础上计算工作日、里程碑和到期日,周六和周日为周末。
WORKDAY是Excel 2007 - 365中的一个内置函数。 在早期版本中,你需要启用分析工具箱。
在Excel中使用WORKDAY时,你必须输入以下参数。
WORKDAY(start_date, days, [节假日])前两个参数是必须的,最后一个参数是可选的。
- 开始日期 - 开始计算工作日的日期。
- 天数 - 从start_date中加/减的工作日数。 正数返回未来日期,负数返回过去日期。
- 假期 - 一个可选的日期列表,这些日期不应该被计算为工作日。 这可以是一个包含你想从计算中排除的日期的单元格范围,或者一个代表日期的序列号的常数。
现在你知道了基础知识,让我们看看你如何在你的Excel工作表中使用WORKDAY函数。
如何使用WORKDAY来增加/减少日期的营业日
要在Excel中计算工作日,请遵循以下简单规则。
- 拟 增加 工作日,输入一个正数作为 天 一个WORKDAY公式的参数。
- 拟 减去 工作日,请在 "工作日 "中使用一个负数。 天 争论。
假设你在A2单元格中有一个开始日期,在B2:B5单元格中有一个假期列表,你想找出未来和过去30个工作日的日期。 你可以用以下公式来做。
在开始日期上增加30个工作日,不包括B2:B5中的假期。
=workday(a2, 30, b2:b5)
要从开始日期减去30个工作日,不包括B2:B5中的假期。
=workday(a2, -30, b2:b5)
要根据以下情况计算出工作日 当前日期 ,使用TODAY()函数作为起始日期。
要在今天的日期上增加30个工作日。
=workday(today(), 30)
要从今天的日期中减去30个工作日。
=workday(today(), -30)
要直接向公式提供起始日期,请使用DATE函数。
=workday(date(2015,5,6), 30)
下面的截图展示了所有这些和另外一些WORKDAY公式的结果。
当然,你可以在某个单元格中输入与开始日期相加/相减的工作日数,然后在你的公式中引用该单元格。 例如。
=workday(a2, c2)
其中A2是开始日期,C2是比开始日期晚(负数)或早(正数)的非周末天数,不包括假日。
提示:在Excel 365和2021中,你可以将WORKDAY与SEQUENCE结合使用来生成一系列工作日。
Excel的WORKDAY.INTL函数
WORKDAY.INTL是对WORKDAY函数的一个更强大的修改,它与 自定义周末参数 和WORKDAY一样,它返回一个在未来或过去的指定工作日数的日期,但让你决定一周中的哪些日子应被视为周末。
WORKDAY.INTL函数是在Excel 2010中引入的,因此在早期的Excel版本中无法使用。
Excel WORKDAY.INTL函数的语法如下。
WORKDAY.INTL(start_date, days, [weekend], [holidays])前两个参数是必需的,类似于WORKDAY的参数。
开始日期 - 最初的日期。
天数 - 开始日期之前(负值)或之后(正值)的工作天数。 如果 天
参数是以十进制数提供的,它被截断为整数。
最后两个参数是可选的。
周末 - 这可以是一个数字,也可以是一个字符串,如下图所示。
数量 | 周末的日子 |
1或省略 | 周六、周日 |
2 | 周日、周一 |
3 | 周一、周二 |
4 | 星期二、星期三 |
5 | 周三、周四 |
6 | 周四、周五 |
7 | 周五、周六 |
11 | 仅限周日 |
12 | 仅限周一 |
13 | 仅星期二 |
14 | 仅限星期三 |
15 | 仅周四 |
16 | 仅限周五 |
17 | 仅限周六 |
周末字符串 - 一系列的0和1,代表一周中的七天,从星期一开始。 1代表非工作日,0代表工作日。 例如。
- "0000011" - 周六和周日是周末。
- "1000001" - 周一和周日是周末。
乍一看,周末串似乎是多余的,但我个人更喜欢这种方法,因为你可以随手制作一个周末串,而不必记住任何数字。
假期 - 一个可选的日期列表,你想从工作日的日历中排除。 这可以是一个包含日期的单元格范围,或者一个代表这些日期的序列值的常数。
在Excel中使用WORKDAY.INTL--公式实例
好吧,我们刚才讨论的相当大的一部分理论可能看起来相当复杂和混乱,但尝试一下你的公式会使事情变得非常容易。
在我们的数据集上,开始日期在A2单元格,假期列表在A5:A8,让我们计算带有自定义周末的工作日。
拟 增加 离开始日期还有30个工作日,周五和周六算作周末,A5:A8中的假期不包括在内。
=workday.intl(a2, 30, 7, a5:a8)
或
=workday.intl(a2, 30, "0000110", a5:a8)
拟 减去 从开始日期起30个工作日,周日和周一算作周末,A5:A8中的假期不包括在内。
=workday.intl(a2, -30, 2, a5:a8)
或
=workday.intl(a2, -30, "1000001", a5:a8)
要增加10个工作日的时间 当前日期 ,周日是唯一的周末日,没有假期。
=workday.intl(today(), 10, 11)
或
=workday.intl(a2, 10, "0000001")
在你的Excel表格中,公式可能看起来与此类似。
注意:Excel的WORKDAY和WORKDAY.INTL函数都会返回代表日期的序列号。 要想让这些数字显示为日期,请选择带有数字的单元格并按Ctrl+1键打开 格式化单元格 对话。 在 数量 选项卡,选择 日期 在 类别 详细步骤,请看如何在Excel中改变日期格式。
Excel的WORKDAY和WORKDAY.INTL错误
如果你的Excel WORKDAY或WORKDAY.INTL公式返回一个错误,原因可能是以下之一。
#NUM! 如果是这样,就会发生错误。
- 的组合。
开始日期
和天
参数的结果是一个无效的日期,或 周末
在WORKDAY.INTL函数中的参数是无效的。
#VALUE! 如果是这样,就会发生错误。
开始日期
中的任何数值,或假期
不是一个有效的日期,或者天
参数为非数字。
Excel的NETWORKDAYS函数
Excel中的NETWORKDAYS函数返回两个日期之间的工作日数,不包括周末,也不包括你指定的假期。
Excel NETWORKDAYS的语法很直观,很容易记住。
NETWORKDAYS(start_date, end_date, [节假日])前两个参数是强制性的,第三个参数是可选的。
- 开始日期 - 开始计算工作日的初始日期。
- 结束日期 - 你要计算工作日的时期结束。
开始日期和结束日期都被计入返回的工作日数。
- 假期 - 一个可选的清单,列出不应计入工作日的假期。
如何在Excel中使用NETWORKDAYS--公式示例
假设你在A2:A5单元格中有一个假期列表,开始日期在B列,结束日期在C列,你想知道这些日期之间有多少个工作日。 适当的NETWORKDAYS公式很容易计算出来。
=networkdays(b2, c2, $a$2:$a$5)
请注意,当开始日期小于结束日期时,Excel的NETWORKDAYS函数会返回一个正值,如果结束日期比开始日期晚,则返回一个负值(如第5行)。
Excel的NETWORKDAYS.INTL函数
与NETWORKDAYS一样,Excel的NETWORKDAYS.INTL函数计算两个日期之间的工作日数,但可以让你指定哪些日子应算作周末。
NETWORKDAYS.INTL函数的语法与NETWORKDAYS'非常相似,只是它有一个额外的[周末]参数,表示一周中的哪些日子应该算作周末。
NETWORKDAYS.INTL( start_date, end_date, [周末], [假期] ) ǞǞǞ 周末
参数可以接受数字或字符串。 数字和周末字符串与在 周末
参数的WORKDAY.INTL函数。
NETWORKDAYS.INTL函数在Excel 365 - 2010中可用。
在Excel中使用NETWORKDAYS.INTL--公式示例
使用前面例子中的日期列表,让我们来计算两个日期之间的工作日数,其中周日是唯一的周末日。 为此,你在下面的表格中输入数字11 周末
你的NETWORKDAYS.INTL公式的参数,或者做成一个由六个0和一个1组成的字符串("0000001")。
=networkdays.intl(b2, c2, 11, $a$2:$a$5)
或
=networkdays.intl(b2, c2, "0000001", $a$2:$a$5)
下面的截图证明,两个公式返回的结果绝对相同。
如何在Excel中突出显示工作日
使用WORKDAY和WORKDAY.INTL函数,你不仅可以在你的Excel工作表中计算工作日,还可以根据你的业务逻辑需要突出显示它们。 为此,你用WORKDAY或WORKDAY.INTL公式创建一个条件格式规则。
例如,在B列的日期列表中,让我们只强调从今天起15个工作日内的未来日期,不包括A2:A3单元格中的两个假期,想到的最明显的公式是如下。
=AND($B2>TODAY(), $B2<=WORKDAY(TODAY(), 15, $A$2:$A$3)
逻辑测试的第一部分切断了过去的日期,也就是说,你检查一个日期是否等于或大于今天:$B2>TODAY()。 而在第二部分,你验证一个日期是否在未来不超过15个工作日,不包括周末日和指定的假日。 $B2<=WORKDAY(TODAY(), 15, $A$2:$A$3)
这个公式看起来是正确的,但一旦你根据它创建一个规则,你会发现它突出了错误的日期。
让我们试着找出发生这种情况的原因。 问题不在于WORKDAY函数,正如有人可能得出的结论。 该函数是正确的,但是......它实际上是做什么的? 它返回一个从现在开始的15个工作日的日期,不包括A2:A3单元格中的周末日(星期六和星期日)和假日。
好的,基于这个公式的规则是做什么的? 它突出显示所有等于或大于今天并且小于函数WORKDAY返回的日期。 你看,所有的日期!如果你不想给周末和假日着色,那么你需要明确告诉Excel不要这样做。 因此,我们在我们的公式中又增加了两个条件。
- 用WEEKDAY函数排除周末:WEEKDAY($B2, 2)<6
- 用COUNTIF函数排除假期:COUNTIF($A$2:$A$3, $B2)=0
正如下面的截图所显示的,改进后的公式工作得很完美。
=AND($B2>TODAY(), $B2<=WORKDAY(TODAY(), 15, $A$2:$A$3), COUNTIF($A$2:$A$3, $B2)=0, WEEKDAY($B2, 2) <6)
正如你所看到的,WORKDAY和WORKDAY.INTL函数使得在Excel中计算工作日变得快速而简单。 当然,你在现实生活中的公式可能会更复杂,但了解基础知识有很大帮助,因为你可以只记住一小部分必要的东西,并推导出其余的东西。 我感谢你的阅读,希望下周能在我们的博客上看到你。