Все формулы Excel обновляются одновременно

#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
 

scr1

scr2

Приведенный выше код проверяет, заполнена ли уже метка времени, прежде чем устанавливать ее.