准备工作
生产环境: Microsoft Office 2026
公式框架: =IF(休息日, "×", "√")
判断逻辑: 若指定日期等于法定休息日,即可判定为休息日。否则,若非法定调班日,且为周六、周日则为休息日。
点击展开流程图
flowchart LR A[开始] --> B{指定日期<br>是否为法定休息日?} B -- 是 --> C[判定:休息日] B -- 否 --> D{是否为法定调班日?} D -- 是 --> E[判定:非休息日] D -- 否 --> F{是否为周六/周日?} F -- 是 --> C F -- 否 --> E
简而言之就是:休息日 = 法定休息日 or 周六、周日(非法定调班日)
根据国务院办公厅关于2026年部分节假日安排的通知_国务院文件_中国政府网,可以创建智能表(其名为"表1"),其中A列标题为休 ,B列标题为班 ,分别填入规定的休息日和调班的日期,然后在D2单元格输入测试用的日期,比如2026-10-10
点击展开表结构 以2026年为例
| 休 | 班 |
|---|---|
| 2026-01-01 | 2026-01-04 |
| 2026-01-02 | 2026-02-14 |
| 2026-01-03 | 2026-02-28 |
| 2026-02-15 | 2026-05-09 |
| 2026-02-16 | 2026-09-20 |
| 2026-02-17 | 2026-10-10 |
| 2026-02-18 | |
| 2026-02-19 | |
| 2026-02-20 | |
| 2026-02-21 | |
| 2026-02-22 | |
| 2026-02-23 | |
| 2026-04-04 | |
| 2026-04-05 | |
| 2026-04-06 | |
| 2026-05-01 | |
| 2026-05-02 | |
| 2026-05-03 | |
| 2026-05-04 | |
| 2026-05-05 | |
| 2026-06-19 | |
| 2026-06-20 | |
| 2026-06-21 | |
| 2026-06-22 | |
| 2026-09-25 | |
| 2026-09-26 | |
| 2026-09-27 | |
| 2026-10-01 | |
| 2026-10-02 | |
| 2026-10-03 | |
| 2026-10-04 | |
| 2026-10-05 | |
| 2026-10-06 | |
| 2026-10-07 |
根据以上准备工作,拆分法定休息日的判断公式
一,判断是否为法定休息日
我们可以使用公式=IFNA(MATCH(D2,表1[休],0)>0,FALSE)来判断指定日期是否在法定休息日之列。
点击展开公式解释 公式解释:
MATCH(D2,表1[休],0)
使用MATCH函数查找D2中的数据,查找源位于"表1"中的"休"列的所有数据,0为精确匹配。
因为MATCH查找到数据后,会返回一个数字,表示在源中的第几个,所以加上
>0来让其返回一个逻辑值,找到了当然是大于0(返回TRUE),没找到就会返回一个"#N/A"的错误IFNA(... , FALSE)
当MATCH没有找到值的时候,出现"#N/A"的错误时,返回一个
FALSE,否则返回>0的判断(一般就是TRUE了)整体来说就是,如果找到法定的休息日,就返回
TRUE表示指定日期为休息日,否则返回FALSE表示指定日期不在法定休息日之列。
二,判断是否为周六、周日(非法定调班日)
-
判断是否为周六、周日
可以使用公式:
=WEEKDAY(D2,2)>5 -
判断是否为法定调班日
调班日 参考休息日的公式为:=IFNA(MATCH(D2,表1[班],0)>0,FALSE)为了便于后面的判断,我们需要加上一个
NOT来反转此公式,用来确定指定日期非调班日即非调班日 的公式为:
=NOT(IFNA(MATCH(D2,表1[班],0)>0,FALSE))
既要是周六周日又要非法定的调班日,我们可以将两个公式使用AND来结合起来,用来求出周六、周日(非法定调班日)
结合后公式为:=AND(WEEKDAY(D2,2)>5, NOT(IFNA(MATCH(D2,表1[班],0)>0,FALSE)))
完整的判断公式
参考上面讲到的逻辑:休息日 = 法定休息日 or 周六、周日(非法定调班日)
合并上面拆分的两段公式,我们可以得到最终的公式:
=OR(IFNA(MATCH(D2,表1[休],0)>0,FALSE), AND(WEEKDAY(D2,2)>5, NOT(IFNA(MATCH(D2,表1[班],0)>0,FALSE))))
套入公式框架:=IF(OR(IFNA(MATCH(D2,表1[休],0)>0,FALSE), AND(WEEKDAY(D2,2)>5, NOT(IFNA(MATCH(D2,表1[班],0)>0,FALSE)))), "×", "√")
其它说明
| 逻辑与(AND) | 逻辑或(OR) | 逻辑非(NOT) |
|---|---|---|
| A | B |