EP03. “Weekdays 统计工作日数量”
🔒 登录后可标记已读- 写一个宏,算出两个日期之间总共有几个工作日(周一到周五,排除周末)
- 思路是逐天走过整个区间,用
Weekday判断当天是不是周末 - 前置知识:EP02 的 DateDiff 函数、以及 DateAdd、Weekday 函数的基本用法
- 学完能自己写「排除周末只算工作日」的天数统计
重点内容
适用版本
桌面版通用(Excel 365 / 2021 / 2019 等)。
完整代码
Dim date1 As Date, date2 As Date, dateToCheck As Date
Dim daysBetween As Integer, weekdays As Integer, i As Integer
weekdays = 0
date1 = Range("B2")
date2 = Range("B3")
daysBetween = DateDiff("d", date1, date2)
For i = 0 To daysBetween
dateToCheck = DateAdd("d", i, date1)
If (Weekday(dateToCheck) <> 1 And Weekday(dateToCheck) <> 7) Then
weekdays = weekdays + 1
End If
Next i
MsgBox weekdays & " weekdays between these two dates"
逻辑说明
- 先用
DateDiff("d", date1, date2)算出两个日期之间总共差几天 - 用循环从 0 跑到这个天数,每一轮用
DateAdd("d", i, date1)算出「起始日期 + i 天」是哪一天 Weekday(dateToCheck)返回这天是星期几,1代表星期日,7代表星期六- 只有「既不是星期日、也不是星期六」的日子,才把
weekdays计数加 1
学完你会
- ✅ 用
DateAdd从一个起始日期往后推算出第 N 天是哪天 - ✅ 用
Weekday判断某天是星期几,1=星期日、7=星期六 - ✅ 结合循环逐天检查,累加符合条件的天数
常见错误
- 忘记
Weekday函数默认返回 1 = 星期日、7 = 星期六,判断条件写反或漏了一个 - 循环范围写成
1 To daysBetween而不是0 To daysBetween,少算了起始那一天 date1/date2直接从 Range 读取时,如果单元格格式不是日期,会读到错误的值
Sources
Blog / Website: