需结合条件格式、自定义函数与分组逻辑实现日期分类:一、用countif匹配节假日列表并标记;二、用weekday识别周末;三、嵌套公式构建“节假日/周末/工作日”三态标签;四、用lambda封装为可复用函数fndaytype。

如果您在Excel中拥有一列日期数据,并希望按节假日、周末、工作日等维度进行分类统计与可视化标记,则需结合条件格式、自定义函数与分组逻辑实现精准识别。以下是解决此问题的步骤:
一、使用COUNTIF匹配法定节假日列表
该方法通过将外部节假日清单作为参照表,利用COUNTIF函数检测当前日期是否存在于该清单中,从而返回布尔结果用于条件格式或分类标记。
1、新建工作表并命名为“节假日”,在A1:A20区域逐行输入当年全部法定节假日日期,确保格式为Excel可识别的标准日期格式(如2026/1/28)。
2、回到主数据表,在空白列(如B列)首行(B2)输入公式:=IF(COUNTIF('节假日'!$A$1:$A$20,A2)>0,"节假日","")。
3、选中B2单元格,双击右下角填充柄,将公式向下复制至整列对应行数。
4、若需高亮显示,可对A列日期区域设置条件格式:选择“开始”→“条件格式”→“新建规则”→“使用公式确定要设置格式的单元格”,输入公式:=COUNTIF('节假日'!$A$1:$A$20,A2)>0,再设定填充色为浅黄色。
二、用WEEKDAY函数识别周末日期
WEEKDAY函数可返回指定日期对应的星期编号,默认以周日为1、周六为7,据此可精确判断是否为周末,适用于无需外部列表的轻量级标记场景。
1、在C列首行(C2)输入公式:=IF(OR(WEEKDAY(A2)=1,WEEKDAY(A2)=7),"周末","工作日")。
2、双击C2右下角填充柄,自动填充至所有日期对应行。
3、如需仅标记周末而保留空值,可改用:=IF(OR(WEEKDAY(A2)=1,WEEKDAY(A2)=7),"周末","")。
4、配合条件格式时,公式为:=OR(WEEKDAY(A2)=1,WEEKDAY(A2)=7),填充色设为浅灰色。
三、构建复合日类型标签(工作日/周末/节假日三态)
为避免重复判断与逻辑冲突,需设计优先级明确的嵌套公式,使节假日优先于周末,周末优先于默认工作日,形成互斥三类标签。
1、在D列首行(D2)输入公式:=IF(COUNTIF('节假日'!$A$1:$A$20,A2)>0,"节假日",IF(OR(WEEKDAY(A2)=1,WEEKDAY(A2)=7),"周末","工作日"))。
2、双击D2右下角填充柄完成整列填充。
3、该公式确保:若某日既是周六又是春节,则仍标记为“节假日”,不被“周末”覆盖。
4、后续可基于D列进行数据透视表分组统计,例如拖入“行”区域后右键→“筛选”→仅显示“节假日”,即可快速提取全部节假日记录。
四、通过LAMBDA定义可复用的日类型函数
借助LAMBDA函数可封装上述逻辑为命名函数,实现跨表格、跨工作簿的一致调用,提升维护性与复用效率。
1、进入“公式”选项卡→“名称管理器”→“新建”,名称填入:fnDayType,引用位置填入:=LAMBDA(date,holidays,IF(COUNTIF(holidays,date)>0,"节假日",IF(OR(WEEKDAY(date)=1,WEEKDAY(date)=7),"周末","工作日")))。
2、确认保存后,在E2输入:=fnDayType(A2,'节假日'!$A$1:$A$20),回车即得对应日类型。
3、该函数支持直接拖拽填充,且当节假日列表更新时,所有调用处自动同步响应。
4、如需扩展支持特殊排班日(如轮班制中的OFF班日),可在LAMBDA参数中追加布尔型参数并嵌入额外判断分支。










