Да, без нее не обойтись. Примерно так можно: [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim oldValue As Variant, kind As Integer If Target.Cells.Count = 1 And Me.Name = "Лист1" And Target.Row >= 2 And Target.Column = 2 Then
'сравниваем старое и новое значение kind = 0 'и ниже переопределяем, если надо (0 = стираем формулу) Select Case VarType(Target.Value) Case 2 To 6 'новое = числа - с vbInteger по vbCurrency If Target.Value = 0 Then 'явное указание 0 kind = 1 'вставляем формулу (или переопределяем ниже) Select Case VarType(oldValue) Case 2 To 6 'старое = числа - с vbInteger по vbCurrency If oldValue = 0 Then 'и старое 0, и новое 0 - т.е. фактически не менялось kind = 2 'ничего не делаем End If End Select End If End Select
'определяем содержимое ячейки справа Select Case kind Case 0 'стираем формулу Target.Next.ClearContents Case 1 'вставляем формулу Target.Next.Formula = "=TODAY()-DATE(" & Format(Now, "yyyy,m,d") & ")" Case 2 'ничего не делаем 'случай старое = 0 и новое = 0 (т.е. не стираем формулу) End Select End If End Sub
[/vba] И далее кол-во прошедших дней считается по вставляемой в ячейку справа формуле, фиксирующей дату редактирования функцией ДАТА:
Да, без нее не обойтись. Примерно так можно: [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim oldValue As Variant, kind As Integer If Target.Cells.Count = 1 And Me.Name = "Лист1" And Target.Row >= 2 And Target.Column = 2 Then
'сравниваем старое и новое значение kind = 0 'и ниже переопределяем, если надо (0 = стираем формулу) Select Case VarType(Target.Value) Case 2 To 6 'новое = числа - с vbInteger по vbCurrency If Target.Value = 0 Then 'явное указание 0 kind = 1 'вставляем формулу (или переопределяем ниже) Select Case VarType(oldValue) Case 2 To 6 'старое = числа - с vbInteger по vbCurrency If oldValue = 0 Then 'и старое 0, и новое 0 - т.е. фактически не менялось kind = 2 'ничего не делаем End If End Select End If End Select
'определяем содержимое ячейки справа Select Case kind Case 0 'стираем формулу Target.Next.ClearContents Case 1 'вставляем формулу Target.Next.Formula = "=TODAY()-DATE(" & Format(Now, "yyyy,m,d") & ")" Case 2 'ничего не делаем 'случай старое = 0 и новое = 0 (т.е. не стираем формулу) End Select End If End Sub
[/vba] И далее кол-во прошедших дней считается по вставляемой в ячейку справа формуле, фиксирующей дату редактирования функцией ДАТА: