Si potrebbe riempire la cella dependend (D2) da una funzione definita dall'utente (funzione macro VBA) che prende il valore della cella C2 come parametro di input, restituendo la data corrente come uscita.
Avere C2 come parametro di input per l'UDF in D2 indica a Excel che è necessario rivalutare D2 ogni volta che cambia C2 (ovvero se il calcolo automatico delle formule è attivato per la cartella di lavoro).
EDIT:
Ecco il codice:
Per l'UDF:
Public Function UDF_Date(ByVal data) As Date
UDF_Date = Now()
End Function
Come Formula in D2:
=UDF_Date(C2)
Si dovrà dare la D2-Cell un formato data-ora, o mostrerà un rappresentante numerico la data del valore di data.
Ed è possibile espandere la formula nell'intervallo desiderato trascinandola se si mantiene il riferimento C2 nella formula relativa D2.
Nota: Questo ancora potrebbe non essere la soluzione ideale, perché ogni volta che Excel ricalcola la cartella di lavoro la data in D2 sarà ripristinato al valore corrente. Per fare in modo che D2 rifletta solo l'ultima volta in cui C2 è stato modificato, ci dovrebbe essere una sorta di tracciamento dei valori passati di C2. Ciò potrebbe ad esempio essere implementato nell'UDF fornendo anche l'indirizzo al di là del valore del parametro di input, memorizzando i parametri di input in un foglio nascosto e confrontandoli con i valori precedenti ogni volta che viene richiamato l'UDF.
Addendum:
Ecco un esempio di implementazione di un UDF che tiene traccia delle modifiche dei valori delle celle e restituisce la data-tempo in cui è stato rilevato gli ultimi cambiamenti. Se lo si usa, si prega di essere consapevole del fatto che:
L'uso del UDF è la stessa come descritto sopra.
L'UDF funziona solo per intervalli di input a cella singola.
La cella valori sono tracciati memorizzando l'ultimo valore della cella e la data-tempo in cui la modifica è stata rilevata nelle proprietà del documento della lavoro. Se la formula viene utilizzata su set di dati di grandi dimensioni, la dimensione del file potrebbe aumentare notevolmente come per ogni cella monitorata da la formula aumenta i requisiti di archiviazione (ultimo valore della cella + data dell'ultima modifica.) Inoltre, forse Excel è non in grado di gestire quantità di proprietà del documento pari a e il codice potrebbe frenare a un determinato punto.
Se il nome di un foglio di lavoro viene modificato, tutte le informazioni di rilevamento delle celle contenute sono andate perse.
Il codice potrebbe frenare per valori di cella per i quali la conversione in stringa non è deterministica.
Il codice riportato di seguito è non testato e deve essere considerato solo come prova del concetto . Usalo a tuo rischio e pericolo.
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
"Ho provato un sacco di codici VBA" Cura di mostrarci [cosa hai provato?] (Http://mattgemmell.com/2008/12/08/what-have-y-tried/) –