日期不仅仅是年月日,更隐藏着星期几的周期信息。WEEKDAY函数正是解读这一密码的钥匙,它能将日期转换为星期数字,赋能考勤、排班、薪资计算等各类周期敏感型业务。
在日常数据处理中,我们常常需要知道某个日期是星期几,或者根据星期几执行不同的计算规则。Excel的WEEKDAY函数正是为此而生,它能将日期转换为对应的星期数字,让周期性分析变得简单而精准。无论是制作日历、计算加班费,还是分析销售周期,WEEKDAY都是不可或缺的工具。
一、WEEKDAY函数基础:三种返回模式详解
1.1 函数语法
WEEKDAY(serial_number, [return_type])
serial_number:要转换的日期(Excel日期序列号)
return_type:(可选)指定返回数字与星期的对应关系
1.2 三种return_type模式对比
| 1 或省略 | |||
| 2 | 中国标准 | ||
| 3 |
记忆技巧:
return_type=2:最符合中国习惯,周一到周日对应1-7return_type=1:星期日开头,美式日历习惯return_type=3:从0开始,适合数组运算和编程思维
1.3 日期输入的正确方式
' 推荐方式 =WEEKDAY(DATE(2025,7,1), 2) ' 明确无歧义 =WEEKDAY(A2, 2) ' A2为日期格式单元格
' 需注意的方式 =WEEKDAY("2025-7-1", 2) ' 依赖系统日期设置 =WEEKDAY(45292, 2) ' 45292是2025/7/1的序列号
二、基础应用:日期转星期几的多种方案
案例1:将日期转换为中文星期格式
需求:将A列的日期转换为"星期X"格式。
数据:
方案一:基础数字转文本(推荐)
B2公式:="星期" & WEEKDAY(A2, 2)
方案二:使用CHOOSE函数映射
B2公式:=CHOOSE(WEEKDAY(A2, 2), "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日")
方案三:使用TEXT函数(最简洁)
B2公式:=TEXT(A2, "aaaa") ' 或:=TEXT(A2, "ddd") ' 返回"一"、"二"等简写
三种方案对比:
"星期"&WEEKDAY | |||
扩展:创建动态星期颜色标记
' 使用条件格式突出周末 条件公式:=WEEKDAY($A2, 2)>5 格式设置:填充浅红色,字体加粗
视频演示:
三、进阶应用:基于星期的智能工资计算系统
案例2:周末加班工资自动计算
业务场景:公司工资计算规则为:工作日(周一至周五)100元/天,周末(周六、周日)三倍工资(300元/天)。
数据准备:

方案一:基础公式法(分步计算)
步骤1:判断是否为周末
C列(是否周末):=WEEKDAY(B3, 2) > 5
WEEKDAY(B3, 2):返回1-7(1=周一,7=周日)>5:判断是否为6(周六)或7(周日)结果:TRUE(周末)或FALSE(工作日)
步骤2:计算单日工资
D列(日工资):=IF(C3, 300, 100) 或:=100 + C3*200 ' 利用TRUE=1, FALSE=0
步骤3:汇总总工资
E2(总工资):=SUM(D3:D23)
方案二:单公式数组计算法(高效简洁)
核心公式:
=SUM((WEEKDAY(B3:B23, 2) > 5) * 200 + 100)
公式深度解析:
WEEKDAY(B3:B23, 2) | {5,4,6,1,7,...} | |
>5 | {FALSE,FALSE,TRUE,FALSE,TRUE,...} | |
*200 | {0,0,200,0,200,...} | |
+100 | {100,100,300,100,300,...} | |
SUM() |
计算逻辑验证:
工作日:
FALSE*200+100= 0+100 = 100元周末:
TRUE*200+100= 200+100 = 300元(三倍工资)
视频演示:
方案三:使用SUMPRODUCT函数(兼容性更好)
对于不支持动态数组的Excel版本:
=SUMPRODUCT((WEEKDAY(B3:B23, 2)>5)*200 + 100)
技术要点:
SUMPRODUCT能直接处理数组运算,无需按Ctrl+Shift+Enter逻辑与方案二相同,但兼容性更好
四、WEEKDAY函数的实战技巧与扩展应用
4.1 判断工作日与休息日
' 判断是否为工作日(周一到周五) =WEEKDAY(日期, 2) < 6
' 判断是否为休息日(周六、周日) =WEEKDAY(日期, 2) > 5
' 仅判断周日 =WEEKDAY(日期, 2) = 7
4.2 计算每月第几个星期几
' 计算2025年7月第2个星期一是几号 =DATE(2025,7,1) + (2-1)*7 + (1 - WEEKDAY(DATE(2025,7,1), 2)) + 7*(WEEKDAY(DATE(2025,7,1), 2)>1) ' 结果为:2025/7/7
4.3 创建智能排班系统
' 根据日期自动分配班次(早班、中班、晚班) =CHOOSE(MOD(WEEKDAY(日期, 2)-1, 3)+1, "早班", "中班", "晚班")
4.4 分析销售数据周期特征
' 按星期分组统计销售额 =SUMIFS(销售额区域, 日期区域, ">="&开始日期, 日期区域, "<="&结束日期, 星期区域, WEEKDAY(日期区域, 2)=星期数字)
五、常见问题与解决方案
Q1:WEEKDAY返回的是数字,如何显示为中文星期?
解决方案:
' 方法1:使用TEXT函数(推荐) =TEXT(A1, "aaaa") ' 返回"星期一" =TEXT(A1, "aaa") ' 返回"一"
' 方法2:自定义格式 设置单元格格式为:aaaa 然后在单元格输入:=A1 (A1为日期)
Q2:如何计算两个日期之间的工作日天数?
解决方案:
' 排除周末 =NETWORKDAYS(开始日期, 结束日期)
' 排除周末和指定节假日 =NETWORKDAYS(开始日期, 结束日期, 节假日范围)
Q3:WEEKDAY函数处理时间戳(含时间的日期)吗?
解决方案:
' WEEKDAY会自动忽略时间部分 =WEEKDAY("2025/7/1 14:30:00", 2) ' 返回2(星期二)
' 如需考虑时间,可先提取日期部分 =WEEKDAY(INT(含时间日期), 2)
Q4:如何根据星期几设置不同的条件格式?
解决方案:
' 突出显示周末 条件公式:=OR(WEEKDAY($A1, 2)=6, WEEKDAY($A1, 2)=7) 格式:设置背景色
' 突出显示周一 条件公式:=WEEKDAY($A1, 2)=1
六、性能优化与最佳实践
6.1 减少易失性函数依赖
' 不推荐:每次计算都会重新获取当前日期 =WEEKDAY(TODAY(), 2)
' 推荐:将TODAY()放在独立单元格,引用该单元格 D1:=TODAY() 其他单元格:=WEEKDAY($D$1, 2)
6.2 批量计算优化
对于大量日期的星期计算:
' 在辅助列一次性计算所有日期的星期 C2:=WEEKDAY(B2, 2) 向下填充至数据末尾
' 后续公式引用该辅助列,避免重复计算
6.3 与表格结构化引用结合
' 在Excel表格中使用 =WEEKDAY([@日期], 2)
七、WEEKDAY与其他日期函数的协同应用
7.1 与EOMONTH结合:计算月末是星期几
' 计算当月最后一天是星期几 =WEEKDAY(EOMONTH(日期, 0), 2)
7.2 与WORKDAY结合:计算工作日后的日期
' 计算10个工作日后的日期 =WORKDAY(开始日期, 10)
' 同时考虑自定义节假日 =WORKDAY(开始日期, 10, 节假日范围)
7.3 创建动态日历
' 生成某月的日历矩阵 =IF(MONTH(DATE(年,月,ROW()-行偏移+COLUMN()-列偏移))=月, DATE(年,月,ROW()-行偏移+COLUMN()-列偏移), "") ' 结合WEEKDAY确定每月1日的位置
八、总结:WEEKDAY的核心价值与应用场景
通过本文的讲解,我们掌握了WEEKDAY函数的精髓:
基础转换:将日期转换为星期数字(三种模式)
工资计算:基于工作日/周末的差异化计算
周期分析:销售、客流、生产数据的周期性分析
排班调度:自动化的班次分配和日程安排
核心建议:
统一使用
return_type=2:符合中国习惯,减少混淆优先使用TEXT函数显示中文星期:比WEEKDAY+CHOOSE更简洁
注意数组公式的兼容性:新版Excel支持动态数组,旧版需用SUMPRODUCT
一个实用挑战:如何用WEEKDAY函数计算某月所有周五的日期列表? 提示:结合EOMONTH、ROW和FILTER函数。
掌握WEEKDAY函数,你就获得了洞察日期周期规律的钥匙。无论是简单的日历制作,还是复杂的业务规则计算,它都能让你的Excel应用更加智能和高效。现在,就将这些技巧应用到你的实际工作中,让日期数据处理变得更加得心应手!
夜雨聆风