乐于分享
好东西不私藏

4.7 Excel WEEKDAY函数全解析:从星期判断到智能工资计算,掌握日期背后的周期密码

4.7 Excel WEEKDAY函数全解析:从星期判断到智能工资计算,掌握日期背后的周期密码

日期不仅仅是年月日,更隐藏着星期几的周期信息。WEEKDAY函数正是解读这一密码的钥匙,它能将日期转换为星期数字,赋能考勤、排班、薪资计算等各类周期敏感型业务。

在日常数据处理中,我们常常需要知道某个日期是星期几,或者根据星期几执行不同的计算规则。Excel的WEEKDAY函数正是为此而生,它能将日期转换为对应的星期数字,让周期性分析变得简单而精准。无论是制作日历、计算加班费,还是分析销售周期,WEEKDAY都是不可或缺的工具。

一、WEEKDAY函数基础:三种返回模式详解

1.1 函数语法

WEEKDAY(serial_number, [return_type])

  • serial_number:要转换的日期(Excel日期序列号)

  • return_type:(可选)指定返回数字与星期的对应关系

1.2 三种return_type模式对比

return_type
返回值范围
对应关系
应用场景
1 或省略
1 到 7
1=星期日, 2=星期一, ..., 7=星期六
兼容旧版Excel,美式习惯
2
1 到 7
1=星期一, 2=星期二, ..., 7=星期日
中国标准
,推荐使用
3
0 到 6
0=星期一, 1=星期二, ..., 6=星期日
编程友好,从0开始

记忆技巧

  • return_type=2:最符合中国习惯,周一到周日对应1-7

  • return_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"格式。

数据

日期
星期几
2025/7/1
?
2025/7/2
?

方案一:基础数字转文本(推荐)

B2公式:="星期" & WEEKDAY(A2, 2)

方案二:使用CHOOSE函数映射

B2公式:=CHOOSE(WEEKDAY(A2, 2), "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日")

方案三:使用TEXT函数(最简洁)

B2公式:=TEXT(A2, "aaaa") ' 或:=TEXT(A2, "ddd")  ' 返回"一"、"二"等简写

三种方案对比

方案
公式长度
优点
缺点
"星期"&WEEKDAY
最短
灵活,可自定义格式
显示为"星期1"、"星期2"
CHOOSE映射
最长
显示完整中文
公式冗长,维护不便
TEXT函数
很短
最简洁,自动本地化
格式固定,不易自定义

扩展:创建动态星期颜色标记

' 使用条件格式突出周末 条件公式:=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)

公式深度解析

部分
计算过程
结果示例(假设有2个周末+3个工作日)
WEEKDAY(B3:B23, 2)
返回每个日期的星期数字数组
{5,4,6,1,7,...}
>5
判断是否周末,生成TRUE/FALSE数组
{FALSE,FALSE,TRUE,FALSE,TRUE,...}
*200
TRUE=1×200=200,FALSE=0×200=0
{0,0,200,0,200,...}
+100
加上基础工资100
{100,100,300,100,300,...}
SUM()
对所有日工资求和
100+100+300+100+300=900

计算逻辑验证

  • 工作日: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函数的精髓:

  1. 基础转换:将日期转换为星期数字(三种模式)

  2. 工资计算:基于工作日/周末的差异化计算

  3. 周期分析:销售、客流、生产数据的周期性分析

  4. 排班调度:自动化的班次分配和日程安排

核心建议

  • 统一使用return_type=2:符合中国习惯,减少混淆

  • 优先使用TEXT函数显示中文星期:比WEEKDAY+CHOOSE更简洁

  • 注意数组公式的兼容性:新版Excel支持动态数组,旧版需用SUMPRODUCT

一个实用挑战:如何用WEEKDAY函数计算某月所有周五的日期列表? 提示:结合EOMONTH、ROW和FILTER函数。

掌握WEEKDAY函数,你就获得了洞察日期周期规律的钥匙。无论是简单的日历制作,还是复杂的业务规则计算,它都能让你的Excel应用更加智能和高效。现在,就将这些技巧应用到你的实际工作中,让日期数据处理变得更加得心应手!