关于公式IF(WEEKDAY(VALUE(D159)=1), D159-3)的语法与功能问询
问题分析与修正方案
首先,你的原公式IF(WEEKDAY(VALUE(D159)=1), D159-3)确实存在逻辑错误,会导致函数无法实现预期功能,原因如下:
核心错误点
WEEKDAY函数的参数要求是日期或数值类型,而你把VALUE(D159)=1这个逻辑判断直接作为参数传入——这个判断会返回布尔值TRUE或FALSE,在Excel里TRUE等价于1,FALSE等价于0。WEEKDAY(1)默认返回1(对应周日,取决于函数默认参数规则),WEEKDAY(0)则会返回错误值,完全偏离了你要判断D159是否为周一的需求。
结合你的场景修正公式
你的需求是:当D159为周一(因周一为节假日,需返回往前推3天的周五),否则返回原日期(原公式未定义else分支,默认会返回FALSE)。
正确写法应该把WEEKDAY的计算结果和“周一”对应的数值做比较,将判断放在IF的条件位:
IF(WEEKDAY(D159,2)=1, D159-3, D159)
- 这里WEEKDAY的第二个参数
2是关键:它让函数返回规则变为「1=周一,7=周日」,刚好匹配你的判断逻辑。 - 如果D列的日期是文本格式(而非Excel可识别的日期值),才需要用VALUE转换,公式调整为:
IF(WEEKDAY(VALUE(D159),2)=1, VALUE(D159)-3, VALUE(D159))
验证效果
比如D159是2024-05-13(周一),WEEKDAY(D159,2)返回1,条件成立,公式返回2024-05-10(周五),完全符合你的需求。
内容的提问来源于stack exchange,提问作者Nooks12
相关产品推荐
相关产品推荐

