#excel #excel-formula
Вопрос:
Я пытаюсь использовать следующую формулу в документе excel: =IF(C2=»»,»»,СЕЙЧАС()). Я просто пытаюсь зафиксировать время заполнения ячейки. Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда обновляется одна формула, все они обновляются.
Например, если у меня есть два формуала:
=IF(C2="","",NOW())
=IF(C3="","",NOW())
Если я обновлю C3, формула, относящаяся к C2, также изменится. Таким образом, мое время всегда совпадает с последней обновленной ячейкой. Я не могу заставить их обновляться, когда обновляются только зависимые ячейки.
Еще одна вещь, которую следует отметить, эта электронная таблица используется в командах MS, поэтому макросы не являются опцией.
Есть ли у меня потенциально неправильная настройка? Или обходной путь?
Заранее спасибо!
Комментарии:
1. Формулы являются живыми и ТЕПЕРЬ изменчивы, а это значит, что они будут вычисляться в любое время, когда вычисляется Excel. Вам нужно будет вручную указать дату и время, если vba не является опцией.
2. Это своего рода вывод, к которому я пришел, но надеялся, что у кого-то есть обходной путь. Я попытался сделать следующее: if(d2<>»», ,IF(C2=»»,»»,СЕЙЧАС())), где d2-ячейка, в которой находится формула. Я подумал, что это может помешать обновлению внутренней формулы, если ячейка уже заполнена. Excel не понравилась формула, ссылающаяся на его собственную ячейку.
3. Более старые версии использовали возможность разрешать циклические ссылки, и вы могли ссылаться на себя. Но это всегда было хакерским и зависит от того, что пользователь изменяет настройки, чтобы разрешить это каждый раз, когда он открывает документ. Более новые версии гораздо более требовательны к использованию циклических ссылок. И я считаю, что онлайн-приложение их вообще не допускает.
4. кроме того, формула была бы:
=if(d2<>"",d2 ,IF(C2="","",NOW()))
5. Я использую ярлык для ввода времени cmnd ;
Ответ №1:
Вы изучали Офисные сценарии? Они работают во многом как макросы в VBA, но они предназначены для Excel Online.
https://docs.microsoft.com/en-us/office/dev/scripts/overview/excel
Ответ №2:
Такое поведение ожидается, так =NEW()
как всегда возвращает текущее время, и вы не можете контролировать, когда лист может быть пересчитан.
Лучший способ справиться с этой ситуацией-создать макрос, который запускается при обновлении рабочего листа и вручную записывает значение в нужную ячейку с текущего времени.
Например, если отслеживаемые значения находятся в столбце «C» (3-й столбец), то приведенный ниже код будет записывать текущее время соседней ячейки (на один столбец больше) каждый раз, когда это значение изменяется.
Поместите код ниже под рабочим листом
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 Then
If IsEmpty(Target.Offset(0, 1)) Then
Target.Offset(0, 1).Value = Now()
End If
End If
End Sub
Приведенный выше код проверяет, заполнена ли уже метка времени, прежде чем устанавливать ее.