求助:如何用VBA追踪公式更新的M列并在AB列记录日期
实现Excel公式单元格更新时自动记录日期的VBA方案
核心思路
Worksheet_Change事件仅响应手动编辑的单元格变化,公式计算导致的值更新需要用Worksheet_Calculate事件捕获。我们借助一个隐藏列存储M列单元格的上一次值,每次计算时对比新旧值,不一致就更新AB列的日期。
代码实现(针对Sheet1)
右键点击目标工作表标签(如Sheet1),选择「查看代码」,粘贴以下代码:
Private Sub Worksheet_Calculate() Dim monitorRange As Range Dim cell As Range ' 定义M列要监控的范围:从M2到最后一行有数据的单元格 Set monitorRange = Me.Range("M2:M" & Me.Cells(Me.Rows.Count, "M").End(xlUp).Row) ' 禁用事件避免循环触发 Application.EnableEvents = False For Each cell In monitorRange ' 用AC列存储上一次的单元格值(可改成其他空列) With Me.Cells(cell.Row, "AC") If IsEmpty(.Value) Then ' 首次运行,初始化旧值 .Value = cell.Value Else ' 对比新旧值,不同则更新AB列日期 If cell.Value <> .Value Then Me.Cells(cell.Row, "AB").Value = Date .Value = cell.Value ' 更新旧值为当前值 End If End If End With Next cell ' 恢复事件启用 Application.EnableEvents = True End Sub
操作细节
- 隐藏存储旧值的列:选中AC列,右键选择「隐藏」,避免干扰日常操作。如果不想用AC列,把代码里的
"AC"改成其他空列(如"AD")即可。 - 调整监控范围:如果M列从M1开始监控,把代码里的
"M2:M"改成"M1:M"。 - 保存格式:文件需保存为「Excel启用宏的工作簿(.xlsm)」,否则宏会失效。
测试验证
修改Sheet4中影响Sheet1 M列公式的单元格(如L2),Sheet1对应的AB列会自动记录当前日期,无需手动编辑M列。
内容的提问来源于stack exchange,提问作者Nn Nn
相关产品推荐
相关产品推荐

