如何通过函数或VBA自动填充Agile-Scrum双周Sprint起止日期
嘿,作为常年跟Scrum和Excel打交道的人,手动更新Sprint日期这种重复活确实该自动化!给你准备了两种实用方案,纯函数和VBA,看你团队的需求选:
方案一:纯Excel函数实现(无需启用宏)
这个方案适合不想碰代码、要实时自动更新的场景,核心是基于第一个Sprint的基准日期来计算后续所有周期:
- 先在一个固定单元格(比如A1)输入你的第一个Sprint开始日期,比如
2024-01-08 - 当前Sprint开始日期:用这个公式自动识别今天所在的Sprint周期
原理:计算今天和基准日的天数差,除以14取整后再乘以14,得到最近的14天周期起始日=A1 + FLOOR((TODAY()-A1)/14,1)*14 - 当前Sprint结束日期:根据你的Sprint规则调整,常见两种情况:
- 严格14天周期(包含周末):
=当前开始日期 +13(比如1月8日开始,1月21日结束) - 仅工作日(10个工作日):用工作日函数自动跳过周末
=WORKDAY(当前开始日期,10)
WORKDAY.INTL函数:=WORKDAY.INTL(当前开始日期,10,11) ' 11代表仅周日休息,其他参数可查Excel帮助 - 严格14天周期(包含周末):
- 要生成未来/过往Sprint日期,只需要把开始日期公式里的
TODAY()换成A1 + (N-1)*14(N是第几个Sprint),下拉填充即可。
方案二:VBA自动填充(适合一键/自动更新)
如果团队需要一键刷新或者打开文件就自动更新日期,VBA会更灵活:
第一步:创建一键更新宏
- 点击Excel顶部的「开发工具」→「插入」→选择「按钮(表单控件)」,在工作表上画一个按钮,命名为「更新Sprint日期」
- 右键按钮→「指定宏」→「新建」,粘贴以下代码:
Sub UpdateSprintDates() ' 替换成你的第一个Sprint开始日期 Dim baseSprintStart As Date baseSprintStart = DateValue("2024-01-08") ' 计算当前Sprint的开始日期 Dim currentStart As Date currentStart = baseSprintStart + Int((Date - baseSprintStart) / 14) * 14 ' 计算结束日期,这里按13天后(完整两周),可根据需求修改 Dim currentEnd As Date currentEnd = currentStart + 13 ' 将日期写入指定单元格(比如B2=开始,C2=结束) Range("B2").Value = currentStart Range("C2").Value = currentEnd ' 格式化日期为可读性高的样式 Range("B2:C2").NumberFormat = "yyyy-mm-dd" End Sub - 保存文件为「Excel启用宏的工作簿(.xlsm)」
第二步:可选——打开文件自动更新
如果希望打开文件就自动刷新日期,右键Excel左上角的工作簿图标→「查看代码」,在「ThisWorkbook」模块里粘贴:
Private Sub Workbook_Open() ' 打开文件时自动调用更新宏 UpdateSprintDates End Sub
小提示
- 如果你的Sprint会因节假日调整周期,VBA里可以用
Application.WorksheetFunction.WorkDay来替代简单的日期加法 - 函数方案适合需要实时同步日期的场景,VBA适合需要批量更新或避免团队成员误改公式的场景
内容的提问来源于stack exchange,提问作者Ruan
相关产品推荐
相关产品推荐

