Попробуйте только этот код:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim xCount As Long
Application.EnableEvents = False
xCount = Cells(ActiveSheet.Rows.Count, 3).End(xlUp).Row - 1
If Target.Address = Range("A10").Address Then
Range("D2").Offset(xCount, 0).Value = Range("A10").Value
Range("C2").Offset(xCount, 0).Value = Now()
Else
If xVal <> Range("A10").Value Then
Range("D2").Offset(xCount, 0).Value = Range("A10").Value
Range("C2").Offset(xCount, 0).Value = Now()
End If
End If
Application.EnableEvents = True
End Sub
Когда я помещаю функцию = NOW () в «A10», то иногда = NOW () в «A10», который был скопирован в «D», показывал секунду раньшевремя, чем значение времени в «C», но я думаю, это не проблема.
Редактировать:
Option Explicit ' To be sure there are not misspelled variables
Private Sub Worksheet_Change(ByVal Target As Range)
Dim xCount As Long
Dim valueCell As Range
Dim timeStampCell As Range
Dim targetCell As Range
Dim xVal As Long
Application.EnableEvents = False
'''''EDIT''''''
Set targetCell = Range("A10")
Set timeStampCell = Range("C2")
Set valueCell = timeStampCell.Offset(0, 1)
'''''''''''''''
xCount = Cells(ActiveSheet.Rows.Count, valueCell.Column).End(xlUp).Row - 1 ' Now it is not checking the third column but the valueCell column
If Target.Address = targetCell.Address Then
valueCell.Offset(xCount, 0).value = targetCell.value
timeStampCell.Offset(xCount, 0).value = Now()
Else
If valueCell.Offset(Cells(ActiveSheet.Rows.Count, valueCell.Column).End(xlUp).Row - 2, 0).value <> targetCell.value Then ' Now duplicates, I forgot I got rid of xVal variable
valueCell.Offset(xCount, 0).value = targetCell.value
timeStampCell.Offset(xCount, 0).value = Now()
End If
End If
Application.EnableEvents = True
End Sub