MICROSOFT

EP03. “Weekdays 统计工作日数量”

首页 Microsoft 工具 Excel · VBA · Date and Time · EP03
约 4 分钟· #EP03#Excel#Date and Time
🔒 登录后可标记已读
  • 写一个宏,算出两个日期之间总共有几个工作日(周一到周五,排除周末)
  • 思路是逐天走过整个区间,用 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:

  1. Weekdays