求助:Excel中用TODAY()计算返工日期后如何避免其每日变动
解决Excel返工日期随TODAY()变动的问题
核心问题
TODAY()是易失性函数,每天打开表格或刷新时都会自动更新,导致用TODAY() + 休假天数计算的返工日期每日变动。要解决这个问题,关键是把动态计算的返工日期转为静态值,同时保留驻场天数的动态计算功能。
方案一:手动将公式结果转为静态值(适合少量数据)
当员工提交休假天数后,按以下步骤固定返工日期:
- 选中计算好返工日期的单元格(公式为
=TODAY() + 休假天数) - 按
Ctrl + C复制单元格内容 - 右键点击该单元格,选择「粘贴选项」中的值(或按快捷键
Ctrl + Alt + V,在弹出的窗口选择「值」后确定) - 此时单元格会从公式转为固定的日期值,不会再随
TODAY()变动
驻场天数的公式保持不变(比如=返工日期单元格 - TODAY()),依然会每天自动更新计算当前到返工日的天数。
方案二:用VBA自动固定返工日期(适合批量/频繁操作)
通过编写工作表事件宏,实现输入休假天数后自动生成静态返工日期:
- 打开Excel表格,按
Alt + F11打开VBA编辑器 - 在左侧项目窗口中,双击你要设置的工作表(比如「Sheet1」)
- 在右侧代码窗口中粘贴以下代码(根据实际列调整,示例中假设休假天数在C列,返工日期在D列):
Private Sub Worksheet_Change(ByVal Target As Range) ' 调整以下列号和偏移量匹配你的表格结构 Const LEAVE_DAYS_COLUMN = 3 ' 休假天数所在列(C列=3) Const RETURN_DATE_COLUMN_OFFSET = 1 ' 返工日期列相对于休假天数列的偏移量(D列=C列+1) If Target.Column = LEAVE_DAYS_COLUMN And Target.Value <> "" Then Application.EnableEvents = False ' 防止触发循环更新 ' 直接赋值为静态日期,而非公式 Target.Offset(0, RETURN_DATE_COLUMN_OFFSET).Value = Date + Target.Value Application.EnableEvents = True End If End Sub
- 保存文件为
.xlsm格式(启用宏的工作簿),同事使用时需启用宏
注意事项
- 宏启用后,只要在休假天数列输入数值,对应的返工日期会自动变为静态日期,无需手动操作
- 驻场天数的公式保持原有逻辑即可,依然会动态计算每日的天数差
内容的提问来源于stack exchange,提问作者walid abdelkader
相关产品推荐
相关产品推荐

