Вы, кажется, действительно хотите VBA, поэтому я выложу другой ответ (весьма отличный от моего другого).
Здесь я использую событие Worksheet_Change
.Вызывает функцию, которая возвращает массив типа Variant, содержащий даты.Затем этот массив можно записать на лист, просто используя =
.
Я считаю, что это немного сложнее, чем просто использование формул в ячейках, но у него есть преимущество в более чистом интерфейсе, который вам, кажется, нужен.
В модуле листа:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A:A")) Is Nothing Then
Target.Offset(0, 1).Resize(1, 3) = RelevantDates(Target.Value)
End If
End Sub
В модуле кода:
Function RelevantDates(startDate As Date) As Variant
Dim v As Variant
' Adapt to your needs:
ReDim v(1 To 3)
v(1) = startDate + 1 ' add one day
v(2) = DateSerial(Year(v(1)), Month(v(1)), Day(v(1)) + 7) ' add one more week
v(3) = DateSerial(Year(v(2)), Month(v(2)) + 1, Day(v(2))) ' add one month
RelevantDates = v
End Function
Конечно, приведенное выше возвращает только 3 довольно тривиальные даты, но вы можете настроить этокак вы считаете нужным.
![enter image description here](https://i.stack.imgur.com/yvbVv.png)