Excel的WORKDAY和NETWORKDAYS函数用于计算工作日

  • Share This
Michael Brown

这个简短的教程解释了如何使用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中计算工作日变得快速而简单。 当然,你在现实生活中的公式可能会更复杂,但了解基础知识有很大帮助,因为你可以只记住一小部分必要的东西,并推导出其余的东西。 我感谢你的阅读,希望下周能在我们的博客上看到你。

    Michael Brown is a dedicated technology enthusiast with a passion for simplifying complex processes using software tools. With more than a decade of experience in the tech industry, he has honed his skills in Microsoft Excel and Outlook, as well as Google Sheets and Docs. Michael's blog is dedicated to sharing his knowledge and expertise with others, providing easy-to-follow tips and tutorials for improving productivity and efficiency. Whether you're a seasoned professional or a beginner, Michael's blog offers valuable insights and practical advice for getting the most out of these essential software tools.