|     
有時(shí)希望在Excel某個(gè)單元格中輸入內(nèi)容時(shí),在另外的單元格中自動(dòng)記錄該單元格輸入時(shí)的日期和時(shí)間,例如在A列錄入數(shù)據(jù)后,在B列同行對(duì)應(yīng)的單元格中自動(dòng)記錄日期和時(shí)間。這時(shí)可用下面的方法來(lái)實(shí)現(xiàn):     方法一:使用公式     1.打開(kāi)“迭代計(jì)算”選項(xiàng)。     由于公式要引用單元格自身,造成循環(huán)引用,必須打開(kāi)“迭代計(jì)算”選項(xiàng),否則Excel會(huì)提示“Microsoft Office 
Excel 不能計(jì)算該公式……,從而造成循環(huán)應(yīng)用。……”的提示。     Excel 2003:?jiǎn)螕簟肮ぞ摺x項(xiàng)→重新計(jì)算”,勾選“迭代計(jì)算”。           Excel 
2007/2010/2013:?jiǎn)螕簟癘ffice按鈕(文件)→選項(xiàng)→公式”,在“計(jì)算選項(xiàng)”區(qū)域勾選“啟用迭代計(jì)算”。     “最多迭代次數(shù)”可保持默認(rèn)的“100”。           2.在B1單元格中輸入公式:     =IF(A1="","",IF(B1="",TEXT(NOW(),"yyyy-m-d 
h:mm:ss"),B1))     然后拖動(dòng)填充柄向下填充公式到所需的位置。     這樣,當(dāng)在A列輸入數(shù)據(jù)時(shí),B列對(duì)應(yīng)的單元格會(huì)自動(dòng)記錄當(dāng)前的日期和時(shí)間。           說(shuō)明:     
1.上述公式雖然能記錄A列單元格中第一次輸入的日期和時(shí)間,但直接更改A列單元格內(nèi)容后,該公式并不能記錄最后一次輸入的日期和時(shí)間。要記錄A列單元格最后輸入的日期和時(shí)間,可先按Delete鍵刪除A列單元格內(nèi)容后再次輸入。     
2.重新打開(kāi)Excel后,上述“迭代計(jì)算”選項(xiàng)會(huì)自動(dòng)取消。如果啟動(dòng)Excel后打開(kāi)了一個(gè)未設(shè)置該選項(xiàng)的工作簿,再次打開(kāi)已設(shè)置“迭代計(jì)算”選項(xiàng)的工作簿時(shí),Excel仍會(huì)給出循環(huán)引用的提示,此時(shí)重新設(shè)置“迭代計(jì)算”選項(xiàng)即可。     方法二:用VBA     
下面的VBA代碼利用“Worksheet_Change”事件來(lái)實(shí)現(xiàn)自動(dòng)記錄日期時(shí)間的目的。在Excel中按Alt+F11,打開(kāi)VBA編輯器,在“工程”窗口中雙擊所需的工作表,在代碼窗口中根據(jù)需要分別粘貼下面的代碼。     1.記錄A列單元格第一次輸入的日期和時(shí)間: Private Sub Worksheet_Change(ByVal Target As 
Range)'在B列單元格中記錄A列同行單元格第一次輸入的日期和時(shí)間
 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列單元格最后一次輸入的日期和時(shí)間: Private Sub Worksheet_Change(ByVal Target As 
Range)'在B列單元格中記錄A列同行單元格最后一次輸入的日期時(shí)間
 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
     在開(kāi)始輸入前,先刪除B列內(nèi)容,然后在A列輸入即可在B列自動(dòng)記錄日期和時(shí)間。 |