如何在Excel与LibreOffice中实现单元格编辑后自动计数天数?
在Excel/LibreOffice中统计单元格上次编辑后的天数
由于公式无法直接追踪单元格的编辑时间,必须结合辅助存储列+宏实现需求,以下分两种软件说明具体操作:
Excel 实现步骤
准备辅助列
选择一个列(比如C列)作为隐藏的编辑时间存储区,用于记录对应目标单元格的最后编辑时间。添加VBA事件宏
- 右键目标工作表标签 → 点击「查看代码」,打开VBA编辑器
- 粘贴以下代码(监控A列的编辑,可根据需求修改
Range("A:A")范围):Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Me.Range("A:A")) Is Nothing Then ' 将当前时间写入对应行的C列 Me.Cells(Target.Row, "C").Value = Now() End If End Sub - 关闭VBA编辑器,保存文件为「启用宏的工作簿(.xlsm)」格式。
设置天数计算公式
在需要显示天数的单元格(比如A2)中输入公式:=IF(C1<>"", DATEDIF(C1, TODAY(), "d"), 0)公式说明:如果C1有记录的编辑时间,计算该时间到今天的天数;否则显示0。
优化体验
右键C列 → 点击「隐藏」,避免误编辑辅助数据。
LibreOffice Calc 实现步骤
准备辅助列
同样选择一个列(比如C列)作为编辑时间存储区。添加Basic事件宏
- 按
Alt+F11打开宏编辑器,展开左侧「My Macros」→ 找到目标工作表 → 右键点击「Insert」→ 选择「Module」 - 粘贴以下代码(监控第1列即A列,可修改
oTarget.Column = 1调整范围):Sub SheetChange(oEvent As Object) Dim oSheet As Object Dim oTarget As Object oSheet = oEvent.Source oTarget = oEvent.Target If oTarget.Column = 1 Then ' 将当前时间写入对应行的C列(第3列,索引从0开始) oSheet.getCellByPosition(2, oTarget.Row - 1).Value = Now() End If End Sub - 关闭宏编辑器,保存文件为「ODF 电子表格(.ods)」格式。
- 按
设置天数计算公式
在目标单元格(比如A2)中输入公式(LibreOffice用分号分隔参数):=IF(C1<>""; DATEDIF(C1; TODAY(); "d"); 0)优化体验
右键C列 → 点击「隐藏」,保护辅助数据。
注意事项
- 首次设置后,只有后续的编辑操作会被记录时间,历史编辑时间无法回溯。
- 如果需要监控多列,可修改宏中的范围判断逻辑(比如
Range("A:C")或oTarget.Column <=3)。
内容的提问来源于stack exchange,提问作者Dennis.Connelly
相关产品推荐
相关产品推荐

