Вы можете заполнить зависимую ячейку (D2) с помощью пользовательской функции (макрофункция VBA), которая принимает значение ячейки C2 в качестве входного параметра, возвращая текущую дату в качестве результата.
Наличие C2 в качестве входного параметра для UDF в D2 говорит Excel, что ему необходимо переоценивать D2 при каждом изменении C2 (то есть, если для рабочей книги включен автоматический расчет формул).
EDIT:
Вот код:
Для UDF:
Public Function UDF_Date(ByVal data) As Date
UDF_Date = Now()
End Function
Как формула в D2:
=UDF_Date(C2)
Вам нужно будет присвоить ячейке D2 формат даты и времени, или он покажет числовое представление значения даты.
И вы можете расширить формулу по требуемому диапазону, перетаскивая ее, если вы сохраните ссылку C2 в относительной формуле D2.
Примечание:
Это все еще может быть не идеальным решением, потому что каждый раз, когда Excel пересчитывает рабочую книгу, дата в D2 сбрасывается до текущего значения.
Чтобы D2 отражал только последний раз, когда C2 был изменен, должно быть какое-то отслеживание прошлых значений C2.
Это, например, может быть реализовано в UDF путем предоставления адреса рядом со значением входного параметра, сохранения входных параметров в скрытом листе и сравнения их с предыдущими значениями каждый раз, когда вызывается 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