
Я хотел бы, чтобы ячейки C5-C39 автоматически заполнялись сегодняшней датой всякий раз, когда данные вводятся в ячейки B5-B39.
Я пытался заставить его работать, =TODAY()
но не понимаю, как структурировать формулу.
решение1
Я бы сказал, что самый простой способ сделать это — использовать пользовательскую функцию. Эта функция будет обновляться при изменении любой ячейки, на которую она ссылается, так что вам не придется привязывать ее к каким-либо событиям.
Функция для вашей задачи будет иметь вид:
Function Updating_Date(dependent_cell as Range) As Date
Updating_Date = Date
End Function
После того, как вы поместили этот код в модуль в вашей рабочей книге, вы можете просто ввести =Updating_Date(B5)
его C5
и скопировать. Это должно заставить дату в C5 обновляться всякий раз, когда изменяются значения в столбце C.
Чтобы дата отображалась только в том случае, если ячейка в столбце B не пуста, можно применить формулу if в ячейке в столбце C, как я уже упоминал вдругой вопрос, который вы задали. Просто введите то же самое условие, которое я показал там (т. е. ISBLANK(B5)
), и сделайте возвращаемым значением пустую строку ( ""
), если условие истинно, и UDF ( Updating_Date(B5)
), если условие ложно.
решение2
Следующий код помещает сегодняшнюю дату в ячейку «B» всякий раз, когда в ячейке «A» происходят изменения:
Private Sub Worksheet_Change(ByVal Target As Range)
' Auto Date
Dim Cell As Range
For Each Cell In Target
If Cell.Column = Range("A:A").Column Then
If Cell.Value <> "" Then
Cells(Cell.Row, "B").Value = Int(Now)
Else
Cells(Cell.Row, "B").Value = ""
End If
End If
Next Cell
End Sub
Этот код необходимо поместить в модуль VBA для того рабочего листа, где вы хотите, чтобы это поведение наблюдалось.
решение3
Это можно сделать без VBA. Мне нужно было заполнить столбец C сегодняшней датой на основе введенного значения столбца B. Эта формула работает, чтобы вставить его правильно.
=IF(ISBLANK(B2)," ",NOW())
Я поместил это в ячейку C2, так как это то место, где я начал свой столбец C. Вы можете поместить это в ячейку любого столбца, с которого вы начинаете. Затем просто убедитесь, что моя ссылка B2 заменена на столбец и ячейку, в которые вводится ваше значение. Например, если ваша начальная ячейка — F3, вы должны изменить формулу следующим образом:
=IF(ISBLANK(F3), " ",NOW()).
А если соответствующая ячейка даты — K3, поместите формулу туда. (Вы можете перетащить формулу в остальные ячейки столбца, как только она окажется в первой.)
Эта формула сохраняет ячейки с датами пустыми до тех пор, пока в ячейку «старта» не будет введено значение. После ввода этого значения добавляется дата. Если значение удалено, Excel автоматически удалит дату. Так что это не идеально, но если вам нужно что-то более сложное, вам, вероятно, понадобится эксперт по Excel или программа, которая сделает это за вас.
решение4
AFIK, вам нужно будет сделать это через VBA. Вы можете создать функцию, которая будет следить за изменениями на вашем рабочем листе, отфильтровывать только изменения в ячейках B5-B39 и обновлять ячейки в C соответствующим образом.
ОБНОВЛЕНИЕ: Вы, вероятно, знаете, как войти в VBA с помощью alt-F11.
Дважды щелкните по объекту Excel с именем Sheet1 или по любому другому интересующему вас листу (в древовидном списке вверху слева), чтобы получить код этого листа.
Выберите Worksheet и Change из двух выпадающих списков. Таким образом, вы получите код, который выглядит так:
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
Теперь доступна переменная «Target», которая является ссылкой на изменяющуюся ячейку.
Добавьте код между этими строками:
debug.Print Target
и нажмите ctrl-G, чтобы отобразить немедленное окно
Внесите некоторые изменения в рабочий лист и вернитесь к коду. Вы увидите, что введенные вами данные появятся в окне «Немедленно».
Теперь измените код if Target.
, и вы увидите раскрывающийся список возможных свойств, относящихся к целевой переменной.
Сделав несколько изменений, вы можете получить следующее:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 And (Target.Row > 4 And Target.Row < 40) Then
Debug.Print Target.Value
End If
End Sub
Который теперь печатает только изменения в интересующем вас диапазоне.
Если вы хотите узнать, как изменить значение в ячейке, вы можете записать макрос, который делает это вручную, и изучить код. Надеюсь, теперь у вас достаточно информации, чтобы продолжить. Дайте мне знать, если нет.