你好,我是刘卓。欢迎来到我的公号,excel函数解析。2021年都过了十多天了,你的flag立好了吗?反正我是没有立!过去我也经常做plan、立flag,但都无一例外地倒塌了,不是“倒”在3天的路上,就是“倒”在5天的路上,索性就算了吧。当然,我希望立了flag的小伙伴最后都能如愿实现。
好了,还是回到咱们的正题。毕竟公号是用来分享和传播excel知识的。最近有个群友问如何得到2021年所有周一到周五的日期,他计划用这些时间来拆解flag,一步步落实到位。
对于这个问题,其实有很多的方法。许多热心的群友也纷纷给出了自己的答案,大部分都是用筛选的方法。
如下图所示,在A3单元格输入2021/1/1,然后向下拖动出2021年的所有日期,这里我只选取一部分数据演示。然后在B3单元格输入公式=WEEKDAY(A3,2),判断这些日期是周几。最后筛选出周一到周五的日期。
其实用excel的填充功能就能实现这个结果。如下图所示,当把A3单元格向下拖动后,会在单元格右下角的位置有个填充的下拉箭头,点击一下,可以选【填充工作日】,会自动把周六周日排除掉。我们也可以在B列判断一下A列的日期有没有周六周日。
但是上面两种方法都要求把全年的日期全部拖出来,还是比较麻烦的。那有没有一种方法,可以直接把全年的日期一次性填充好呢?答案是有的。
如下图所示,首先选中A3单元格,然后点【开始】-【填充】-【序列】,弹出序列对话框,序列产生在选【列】,类型选【日期】,日期单位选【工作日】,步长值为1,终止值为2021-12-31,最后点确定。填充完成,也可以用weekday在B列验证一下有没有周六日。也有些群友给出了函数的方法,有一位群友的公式令我记忆犹新。他用的函数是workday.intl。这个函数是使用自定义周末参数返回在指定的若干个工作日之前或之后的一个日期。公式为=WORKDAY.INTL(DATE(2021,1,0),ROW(A1),"0000011"),向下填充。
第一参数DATE(2021,1,0)是2020年最后一天的日期,也就是2020/12/31。
第二参数ROW(A1)返回A1单元格的行号,也就是1,当公式向下填充时,会变为2,3,4,……。
第三参数"0000011"是自定义周末参数,它是由0和1组成的有7个长度的字符串,7个位置分别代表周一到周日是工作日还是休息日。0代表工作日,1代表休息日。所以"0000011"代表周一到周五是工作日,周六和周日是休息日。
WORKDAY.INTL整个公式的意思是由2020/12/31分别往后推1,2,3,……n个工作日得到的日期。由于周六和周日被设定为休息日,所以会被跳过。这样相当于把周六和周日筛选掉了。对这个函数不了解的话,可以参考《workday.intl使用自定义周末参数返回指定工作日之前或之后的日期》。
上面那个公式,当不断向下填充时,日期会超过2021年,所以要加个限制条件。当这个日期小于2022/1/1时,还是它自己;否则为空格。如下图所示,公式为=TEXT(WORKDAY.INTL(DATE(2021,1,0),ROW(A300),"0000011"),"[<"&DATE(2022,1,1)&"]e/m/d; ")。最后,给大家留个思考题:如果只列举2021年所有周一和周五的日期,该如何写公式?
https://pan.baidu.com/s/1pUIXRQWQi26yNs4dFNn7Lw