您可以填寫dependend細胞(D2 )通過用戶定義函數(VBA宏函數)將C2-Cell的值作爲輸入參數,將當前日期作爲輸出返回。
將C2作爲D2中UDF的輸入參數告訴Excel,每次C2更改時(即如果爲工作簿打開公式的自動計算),都需要重新評估D2。
編輯:
下面是一些代碼:
對於UDF:
Public Function UDF_Date(ByVal data) As Date
UDF_Date = Now()
End Function
如公式在D2:
=UDF_Date(C2)
你得給D2-Cell是日期時間格式,或者它將顯示數字表示日期值。
如果將C2參考保留在D2公式的相對位置,則可以通過拖動公式將其展開爲所需的範圍。
注: 這仍然可能不是理想的解決方案,因爲每次重新計算的Excel工作簿中的D2的日期將被重置爲當前值。 爲了使D2僅反映C2最後一次改變,必須對C2的過去值進行某種跟蹤。 例如,這可以通過在UDF中提供地址alonside輸入參數的值,將輸入參數存儲在隱藏表中並在每次調用UDF時將它們與先前的值進行比較來實現。
附錄:
這裏是跟蹤的單元值的變化和被檢測的最後一個發生變化時返回的日期時間的UDF的樣本實現。 當使用它時,請注意的是:
的UDF的使用是相同的,如上所述。
的UDF僅適用於單細胞輸入範圍。
單元格值通過存儲單元格的最後一個值以及在 工作簿的文檔屬性中檢測到更改時的日期時間進行跟蹤。如果公式中使用了大型數據集的 文件的大小可能會顯着增加,因爲對於每一個被 公式的存儲需求的增長追蹤細胞(上次更改的細胞+ 日期的最後一個值。)此外,也許Excel是無法處理大量的文檔屬性,並且代碼可能會在 的某個點上制動。
如果工作表的名稱被改變了其中的所有跟蹤信息包含細胞丟失。
細胞值的代碼可能制動器針對轉換到串是非確定性的。
下面的代碼是未測試並應被視爲僅作爲 概念的證明。 使用它需自擔風險。
Public Function UDF_Date(ByVal inData As Range) As Date
Dim wb As Workbook
Dim dProps As DocumentProperties
Dim pValue As DocumentProperty
Dim pDate As DocumentProperty
Dim sName As String
Dim sNameDate As String
Dim bDate As Boolean
Dim bValue As Boolean
Dim bChanged As Boolean
bDate = True
bValue = True
bChanged = False
Dim sVal As String
Dim dDate As Date
sName = inData.Address & "_" & inData.Worksheet.Name
sNameDate = sName & "_dat"
sVal = CStr(inData.Value)
dDate = Now()
Set wb = inData.Worksheet.Parent
Set dProps = wb.CustomDocumentProperties
On Error Resume Next
Set pValue = dProps.Item(sName)
If Err.Number <> 0 Then
bValue = False
Err.Clear
End If
On Error GoTo 0
If Not bValue Then
bChanged = True
Set pValue = dProps.Add(sName, False, msoPropertyTypeString, sVal)
Else
bChanged = pValue.Value <> sVal
If bChanged Then
pValue.Value = sVal
End If
End If
On Error Resume Next
Set pDate = dProps.Item(sNameDate)
If Err.Number <> 0 Then
bDate = False
Err.Clear
End If
On Error GoTo 0
If Not bDate Then
Set pDate = dProps.Add(sNameDate, False, msoPropertyTypeDate, dDate)
End If
If bChanged Then
pDate.Value = dDate
Else
dDate = pDate.Value
End If
UDF_Date = dDate
End Function
「我嘗試了很多VBA代碼」小心向我們展示[你試過了什麼?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – 2012-02-17 02:34:40