阅: 1989 | 回: 0
等级:初学者
- 积分:0
- 财富值:0.0
- 身份:普通用户
自动记录单元格数据的输入日期和时间
有时希望在Excel某个单元格中输入内容时,在另外的单元格中自动记录该单元格输入时的日期和时间,例如在A列录入数据后,在B列同行对应的单元格中自动记录日期和时间。这时可用下面的方法来实现:
方法一:使用公式
1.打开“迭代计算”选项。
由于公式要引用单元格自身,造成循环引用,必须打开“迭代计算”选项,否则Excel会提示“Microsoft Office Excel 不能计算该公式……,从而造成循环应用。……”的提示。
Excel 2003:单击“工具→选项→重新计算”,勾选“迭代计算”。
有时希望在Excel某个单元格中输入内容时,在另外的单元格中自动记录该单元格输入时的日期和时间,例如在A列录入数据后,在B列同行对应的单元格中自动记录日期和时间。这时可用下面的方法来实现:
方法一:使用公式
1.打开“迭代计算”选项。
由于公式要引用单元格自身,造成循环引用,必须打开“迭代计算”选项,否则Excel会提示“Microsoft Office Excel 不能计算该公式……,从而造成循环应用。……”的提示。
Excel 2003:单击“工具→选项→重新计算”,勾选“迭代计算”。
Excel 2007/2010/2013:单击“Office按钮(文件)→选项→公式”,在“计算选项”区域勾选“启用迭代计算”。
“最多迭代次数”可保持默认的“100”。
“最多迭代次数”可保持默认的“100”。
2.在B1单元格中输入公式:
=IF(A1="","",IF(B1="",TEXT(NOW(),"yyyy-m-d h:mm:ss"),B1))
然后拖动填充柄向下填充公式到所需的位置。
这样,当在A列输入数据时,B列对应的单元格会自动记录当前的日期和时间。
说明:
1.上述公式虽然能记录A列单元格中第一次输入的日期和时间,但直接更改A列单元格内容后,该公式并不能记录最后一次输入的日期和时间。要记录A列单元格最后输入的日期和时间,可先按Delete键删除A列单元格内容后再次输入。
2.重新打开Excel后,上述“迭代计算”选项会自动取消。如果启动Excel后打开了一个未设置该选项的工作簿,再次打开已设置“迭代计算”选项的工作簿时,Excel仍会给出循环引用的提示,此时重新设置“迭代计算”选项即可。
方法二:用VBA
下面的VBA代码利用“Worksheet_Change”事件来实现自动记录日期时间的目的。在Excel中按Alt+F11,打开VBA编辑器,在“工程”窗口中双击所需的工作表,在代码窗口中根据需要分别粘贴下面的代码。
1.记录A列单元格第一次输入的日期和时间:
Private Sub Worksheet_Change(ByVal Target As Range)
'在B列单元格中记录A列同行单元格第一次输入的日期和时间
Dim rCell As Range
With Target
If .Count = 1 Then
If .Column = 1 And .Offset(0, 1) = "" Then
.Offset(0, 1).NumberFormat = "yyyy-m-d h:mm:ss"
.Offset(0, 1) = Now
End If
Else
If Intersect(Target, Range("A:A")) Is Nothing Then End
For Each rCell In Intersect(Target, Range("A:A"))
If rCell.Column = 1 And rCell.Offset(0, 1) = "" Then
rCell.Offset(0, 1).NumberFormat = "yyyy-m-d h:mm:ss"
rCell.Offset(0, 1) = Now
End If
Next
End If
End With
End Sub
2.记录A列单元格最后一次输入的日期和时间:
Private Sub Worksheet_Change(ByVal Target As Range)
'在B列单元格中记录A列同行单元格最后一次输入的日期时间
Dim rCell As Range
With Target
If .Count = 1 Then
If .Column = 1 Then
.Offset(0, 1).NumberFormat = "yyyy-m-d h:mm:ss"
.Offset(0, 1) = Now
End If
Else
If Intersect(Target, Range("A:A")) Is Nothing Then End
For Each rCell In Intersect(Target, Range("A:A"))
rCell.Offset(0, 1).NumberFormat = "yyyy-m-d h:mm:ss"
rCell.Offset(0, 1) = Now
Next
End If
End With
End Sub
在开始输入前,先删除B列内容,然后在A列输入即可在B列自动记录日期和时间。
=IF(A1="","",IF(B1="",TEXT(NOW(),"yyyy-m-d h:mm:ss"),B1))
然后拖动填充柄向下填充公式到所需的位置。
这样,当在A列输入数据时,B列对应的单元格会自动记录当前的日期和时间。
1.上述公式虽然能记录A列单元格中第一次输入的日期和时间,但直接更改A列单元格内容后,该公式并不能记录最后一次输入的日期和时间。要记录A列单元格最后输入的日期和时间,可先按Delete键删除A列单元格内容后再次输入。
2.重新打开Excel后,上述“迭代计算”选项会自动取消。如果启动Excel后打开了一个未设置该选项的工作簿,再次打开已设置“迭代计算”选项的工作簿时,Excel仍会给出循环引用的提示,此时重新设置“迭代计算”选项即可。
方法二:用VBA
下面的VBA代码利用“Worksheet_Change”事件来实现自动记录日期时间的目的。在Excel中按Alt+F11,打开VBA编辑器,在“工程”窗口中双击所需的工作表,在代码窗口中根据需要分别粘贴下面的代码。
1.记录A列单元格第一次输入的日期和时间:
Private Sub Worksheet_Change(ByVal Target As Range)
'在B列单元格中记录A列同行单元格第一次输入的日期和时间
Dim rCell As Range
With Target
If .Count = 1 Then
If .Column = 1 And .Offset(0, 1) = "" Then
.Offset(0, 1).NumberFormat = "yyyy-m-d h:mm:ss"
.Offset(0, 1) = Now
End If
Else
If Intersect(Target, Range("A:A")) Is Nothing Then End
For Each rCell In Intersect(Target, Range("A:A"))
If rCell.Column = 1 And rCell.Offset(0, 1) = "" Then
rCell.Offset(0, 1).NumberFormat = "yyyy-m-d h:mm:ss"
rCell.Offset(0, 1) = Now
End If
Next
End If
End With
End Sub
2.记录A列单元格最后一次输入的日期和时间:
Private Sub Worksheet_Change(ByVal Target As Range)
'在B列单元格中记录A列同行单元格最后一次输入的日期时间
Dim rCell As Range
With Target
If .Count = 1 Then
If .Column = 1 Then
.Offset(0, 1).NumberFormat = "yyyy-m-d h:mm:ss"
.Offset(0, 1) = Now
End If
Else
If Intersect(Target, Range("A:A")) Is Nothing Then End
For Each rCell In Intersect(Target, Range("A:A"))
rCell.Offset(0, 1).NumberFormat = "yyyy-m-d h:mm:ss"
rCell.Offset(0, 1) = Now
Next
End If
End With
End Sub
在开始输入前,先删除B列内容,然后在A列输入即可在B列自动记录日期和时间。
我的个性签名