You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Excel中两个日期函数的周末处理:将周末日期默认转为前周五

解决Excel日期自动调整为非周末(周末转前一个周五)的问题

嘿,我懂你遇到的麻烦了——用WEEKDAY结合IF的时候逻辑没捋顺,导致减天数出错对吧?别担心,咱们一步步把它搞定。

首先明确核心需求:不管是从DATE(YEAR(E5);MONTH(E5);DAY(E5))还是TRUNC([@CAT]-TIME(10;0;0))得到的日期,只要是周六/周日,就自动转成前一个周五;工作日就保持原样。

问题根源:WEEKDAY参数的选择

你之前出错大概率是因为WEEKDAY的默认参数(参数1)是周日=1、周一=2...周六=7,这种规则下判断周末的逻辑很容易搞混。推荐用WEEKDAY(日期,2),它的规则是周一=1、周二=2...周五=5、周六=6、周日=7,这样判断周末就直观多了——只要返回值>5,就是周末。

通用解决方案公式

我们可以用嵌套IF的公式,针对周末日期计算需要减去的天数:

=IF(WEEKDAY(你的原日期公式,2)>5, 你的原日期公式 - (WEEKDAY(你的原日期公式,2)-5), 你的原日期公式)
  • 逻辑解释:如果是周六(返回6),就减1天(6-5=1);如果是周日(返回7),就减2天(7-5=2),刚好回到前一个周五;工作日则直接保留原日期。

针对你的两个函数分别调整

1. 对应=DATE(YEAR(E5);MONTH(E5);DAY(E5))的公式

其实这个函数和直接引用E5是等价的(它只是提取E5的年月日再重新组合日期),所以可以简化成:

=IF(WEEKDAY(E5,2)>5, E5 - (WEEKDAY(E5,2)-5), E5)

如果坚持保留原函数结构,也可以写成:

=IF(WEEKDAY(DATE(YEAR(E5);MONTH(E5);DAY(E5)),2)>5, DATE(YEAR(E5);MONTH(E5);DAY(E5)) - (WEEKDAY(DATE(YEAR(E5);MONTH(E5);DAY(E5)),2)-5), DATE(YEAR(E5);MONTH(E5);DAY(E5)))

2. 对应=TRUNC([@CAT]-TIME(10;0;0))的公式

直接把原函数套入通用公式即可:

=IF(WEEKDAY(TRUNC([@CAT]-TIME(10;0;0)),2)>5, TRUNC([@CAT]-TIME(10;0;0)) - (WEEKDAY(TRUNC([@CAT]-TIME(10;0;0)),2)-5), TRUNC([@CAT]-TIME(10;0;0)))

如果你的Excel版本支持LET函数(Office 365及以上),可以用它简化重复计算,让公式更清晰:

=LET(adjusted_date, TRUNC([@CAT]-TIME(10;0;0)), IF(WEEKDAY(adjusted_date,2)>5, adjusted_date - (WEEKDAY(adjusted_date,2)-5), adjusted_date))

验证例子

  • 测试日期:2018/03/11(周日),WEEKDAY返回7,7>5,所以7-5=2,日期减2得到2018/03/09(周五),符合预期。
  • 测试日期:2018/03/05(周一),WEEKDAY返回1,不大于5,直接保留原日期,正确。

内容的提问来源于stack exchange,提问作者Ruan

火山引擎 最新活动