我的 Excel 电子表格中有一些这样的列:
Name Date Time
我希望当用户在第一列(A 列)添加姓名时,“日期和时间”列会自动添加写入姓名的日期和时间。这样就可以记录在 A 列中进行输入的时间。
有没有办法可以自动填充这些数据?
答案1
(本答案基于文章 如何在 Excel 中快速插入日期和时间戳,您可以在其中通过屏幕截图找到更多信息。)
使用 Excel 公式,几乎不可能自动插入在工作表重新计算时不会改变的时间戳。但是,存在一种解决方法,即使用公式,同时滥用 Excel 的一个公式计算功能。
此功能被滥用是
循环引用,即以永无止境的方式编写一系列计算。例如,设置单元格A2=A1+A2
将导致单元格 A2 的值不断增加,只要该值继续重新计算。
步骤 1:启用有限迭代计算
- 打开 Excel文件 > 选项 > 公式
- 在“计算选项”下,启用“启用迭代计算”并将最大值设置为较低值(
1
可以)
现在 Excel 将重新计算循环引用,但在一定次数的计算后将停止。
步骤 2:输入循环公式
假设要在 A 列中输入值,从 A2 开始,时间列在 B 列。
公式如下:=IF(A2<>"",IF(B2<>"",B2,NOW()),"")
当在 A 列输入值时,时间戳会自动出现在相邻的 B 列单元格中,并且在稍后修改 A2 单元格时不会更新。
修改日期的替代方案
上述方法适用于将 B2 列设置为 A2 中输入第一个值的时间。
变体公式适用于每次修改 A2 列时更新时间的情况。
使用以下公式:=IF(A2<>"",IF(AND(B2<>"",CELL("address")=ADDRESS(ROW(A2),COLUMN(A2))),NOW(),IF(CELL("address")<>ADDRESS(ROW(A2),COLUMN(A2)),B2,NOW())),"")
答案2
您可以使用 VBA 执行此操作,如下所示:
将此代码放入您正在处理的工作表的工作表代码中:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim MyRnge As String, MyTime As String, mydate As String
MyRnge = Range("B2:B" & Rows.Count).Address
If Not Intersect(Target, Range(MyRnge)) Is Nothing Then
mydate = Format(Date, "Long Date")
MyTime = Format(Now, "hh:mm:ss")
Target.Offset(0, 1).Value = mydate & " " & MyTime
End If
End Sub
将 MyRnge 更改为您想要覆盖的范围。更改日期和时间的格式以适应更改偏移量(从 1 开始)以反映您希望日期/时间出现的列。在选定的列中输入事件: